在hibernate应用程序中使用P6Spy拦截JDBC数据到数据库

时间:2011-02-18 17:56:02

标签: hibernate jdbc p6spy

我开发休眠控制台应用程序,并且是指本文http://www.mkyong.com/hibernate/how-to-display-hibernate-sql-parameter-values-solution/来设置P6SPY为了看到什么是实际值的“(?)”的由Hibernate生成的SQL。

设置应该可以正常工作,因为我可以看到P6Spy在应用程序启动期间输出的信息/调试消息。但是,之后,P6Spy似乎无法拦截任何JDBC语句。从hibernate生成的日志(例如:Hibernate: insert into Module (projectName, moduleName, projectId) values (?, ?, ?))中,可以确定JDBC语句已经发送到数据库。

以下是我的设置:

hibernate.cfg.xml中

  • 已指定使用P6Spy 司机:<property name="hibernate.connection.driver_class">com.p6spy.engine.spy.P6SpyDriver</property>
  • 已经开启了 hibernate.show_sql属性: <property name="hibernate.show_sql">true</property>

spy.properties

  • 已经改为使用我的实际 数据库JDBC驱动程序,过滤器设置为 false,includecategories已经 明确设置为记录任何内容。
module.log=com.p6spy.engine.logging.P6LogFactory
realdriver=oracle.jdbc.driver.OracleDriver
filter=false
dateformat=yyyy.MM.dd HH:mm:ss
excludecategories=
includecategories=error, info, batch, debug,statement,commit,rollback,result
appender=com.p6spy.engine.logging.appender.StdoutLogger

我是否会错过任何重要的设置?

3 个答案:

答案 0 :(得分:1)

我从未使用过P6Spy,但您可以将绑定变量输出到您的日志中。尝试将它放在log4j.properties或xml文件中。

log4j.category.org.hibernate.type = DEBUG,CONSOLE

答案 1 :(得分:1)

此类问题的常见原因是在P6SpyDriver之前加载了JDBC驱动程序。您可以通过在spy.properties中设置deregisterdrivers = true来解决此问题。

BTW - 此问题已在2.0-alpha-1中修复。

答案 2 :(得分:0)

最后,我放弃P6Spy,因为它是最新版本回到2003年的旧库。我使用另一个名为log4jdbc的类似免费开源来拦截JDBC语句,请参阅this如果您有兴趣了解更多信息。