我使用的是Spring JdbcTemplate
(Spring 4.1.4版)。我的班级' JdbcTemplate实例,我将select查询作为预准备语句。但是,我的查询意外地没有返回任何结果。因此,我真的需要调试我的查询,并确保查询是我期望它应该是。
如何在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);
}
}
答案 0 :(得分:1)
我会给出一个通用的方法来调试你的所有语句,并在你想要的时候在控制台中看到它们,因为spring默认情况下会这样做 添加到您的类路径
此类发出的所有SQL都记录在与模板实例的完全限定类名对应的类别下的DEBUG级别(通常是JdbcTemplate,但如果您使用的是JdbcTemplate类的自定义子类,则可能会有所不同)
<强> log4j2.xml 强>
<?xml version="1.0" encoding="UTF-8"?>
<configuration >
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
</Console>
</Appenders>
<Loggers>
<Root level="error">
<AppenderRef ref="Console" />
</Root>
<Logger level="debug" name="org.springframework.jdbc">
<AppenderRef ref="Console" />
</Logger>
</Loggers>
</configuration>
添加到您的lib log4j-api-2.5.jar
log4j-core-2.5.jar
log4j-jcl.2.5.jar
,您现在可以开始使用了。
关闭调试 改变水平
<Logger level="error" name="org.springframework.jdbc">
<AppenderRef ref="Console" />
</Logger>
现在spring不会调试,但它只会打印错误