【发布时间】:2016-02-22 19:47:20
【问题描述】:
我正在使用 Spring 的 JdbcTemplate(Spring 版本 4.1.4)。使用我的班级'JdbcTemplate 实例,我将选择查询作为准备好的语句。但是,我的查询意外地没有返回任何结果。因此,我真的需要调试我的查询并确保查询符合我的预期。
如何取回作为JdbcTemplate 内部PreparedStatement 的一部分对数据库执行的实际SQL?
我熟悉使用 PreparedStatement's toString() method 来完成此操作,但由于 JDBCTemplate 在内部使用 PreparedStatement,我不确定使用 Spring 的可行性。
我正在使用的一些示例代码如下:
private static final String PREPARED_QUERY =
"select\n" +
" spm.amount\n" +
"from\n" +
" search_price_modifier spm\n" +
"where\n" +
" spm.search_id = ?\n" +
" and spm.search_date > to_date(?, 'MM-DD-YYYY HH24:MI:SS')\n" +
" and spm.search_date < to_date(?, 'MM-DD-YYYY HH24:MI:SS')\n";
public void runQuery(String searchId, String strSearchDateInfimum,
String strSearchDateSupremum) {
SqlRowSet amounts = this.jdbcTemplate.queryForRowSet(
PREPARED_QUERY_FOR_FLAT_MARKUP_VERIFICATION,
searchId, strSearchDateInfimum, strSearchDateSupremum);
while (amounts.next()) {
float amount = amounts.getFloat("AMOUNT");
LOGGER.debug("amount=" + amount);
}
}
【问题讨论】:
-
您是否在同一个请求上尝试过计数(*)?只是为了确保请求/参数有效并返回结果?
-
您可能在
from和where之前缺少空格,具体取决于 JDBCTemplate 如何解释\n。你确定没有抛出异常吗? -
不确定您使用的是什么 GUI。在 Eclipse 中,您可以调试以获取 SQL 语句和正在发送的参数。您也可以在 from 和 where 子句之前添加空格。也尝试添加 Try catch 块
-
@VirtualTroll,感谢您的提示。不幸的是,count(1) 也返回 0 行。但它不应该。
-
@MickMnemonic,我认为它正确解释了空格,因为没有发生错误,只是没有返回数据。
标签: java spring spring-jdbc jdbctemplate