2011-12-11 42 views
2

可能重复:
Seeing the underlying SQL in the Spring JdbcTemplate?是否可以输出使用jdbctemplate发送到mysql的sql?

我使用的JdbcTemplate是这样的:

getJdbcTemplate.update("update ....... values (?,?,?....?)", myObject.getProperty1(), ...); 

是否有可能对我来说,写出来的生成的SQL的logger.trace发送到MySQL?

这将使我的调试过程变得更简单,因为我可以准确地看到mysql正在获取什么。

+0

只是一种替代方法。如果你正在本地或开发环境中运行,查看你的mysql查询日志有什么问题吗? –

+0

Chris J,没有什么不对,只是不知道mysql足以做到这一点。 – Blankman

回答

6

在JDBC URL,就可以动态地添加以下属性,以使MySQL的语句记录:

的jdbc:mysql的://本地主机:3306/sakila的profileSQL =真

你可以阅读更多关于此这里:

http://dev.mysql.com/doc/connector-j/en/connector-j-reference-configuration-properties.html

阅读上在调试/仿形部作为这些的组合的属性可以是用于日志级别非常灵活,日志输出等(例如记录器。)

另一种方法是,如http://code.google.com/p/log4jdbc/

2

JdbcTemplate的调试级别日志查询使用JDBC日志代理库。您只需要在org.springframework.jdbc.core.JdbcTemplate上启用调试日志记录。

您还可以从连接池中获取查询日志记录。例如,如果您使用的是BoneCP,请打开logStatementsEnabled并设置您的com.jolbox.bonecp记录器以在调试级别进行记录。使用BoneCP的日志记录的优点是您可以获取预先准备的语句占位符值。以下是显示差异的相同查询的输出,其中PreparedStatementHandle是BoneCP类。

[2011-12-11 11:43:25,749] DEBUG Executing prepared SQL query (JdbcTemplate) 
[2011-12-11 11:43:25,753] DEBUG Executing prepared SQL statement [select * from player where player_id = ?] (JdbcTemplate) 
[2011-12-11 11:43:25,794] DEBUG select * from player where player = 123 (PreparedStatementHandle) 
+0

很酷的感谢,profileSQL也显示了sql的最终结果,其中值取代了实际值。 – Blankman

+0

这种方法的好处是,你使用哪个dbms然后 –

+0

没关系,我在我的log4j.xml中将调试级别设置为org.springframework.jdbc.core.JdbcTemplate,但仍然不能正常工作!请建议。 –

相关问题