Spring JDBC模板未绑定所有参数(获取参数值)

时间:2016-09-21 09:31:13

标签: java sql spring jdbctemplate oracle12c

我正在学习Oracle 12 C的新功能(前N个查询和分页)。我尝试了一些使用offset和fetch关键字的例子,当我使用sql developer时它运行良好。我尝试使用Spring jdbcTemplate实现相同的功能,我发现了一个奇怪的行为。 例如:以下是代码段:

// get first ten entities
String query = "SELECT * FROM ENTITY E order by E.ID offset ? rows fetch next ? rows only";
SqlRowSet rowSet = this.jdbcTemplate.queryForRowSet(query, 1, 10);
while(rowSet.next()){
  //do something
}

Spring抛出异常:

  

org.springframework.jdbc.BadSqlGrammarException:   PreparedStatementCallback;错误的SQL语法[SELECT * FROM ENTITY E   按E.ID偏差排序?行获取下一个?仅行];嵌套异常   是:错误:语法错误在或接近" $ 2"

我在postgres数据库上尝试了一些相同的东西,但没有运气,最后我考虑删除参数,当我删除第三个参数并在查询字符串中设置硬编码值时它起作用.ex:

"SELECT * FROM ENTITY E order by E.ID offset ? rows fetch next 10 rows only"

是否不允许在fetch子句中使用bind参数?

1 个答案:

答案 0 :(得分:1)

如果你在fetch参数上添加(),它可以正常工作:

String query = "SELECT * FROM ENTITY E order by E.ID offset ? rows fetch next (?) rows only";