我正在开发一个休眠控制台应用程序并参考这篇文章 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 语句已经发送到数据库。

以下是我的设置:

休眠配置文件

  • 已经指定使用P6Spy驱动程序: <property name="hibernate.connection.driver_class">com.p6spy.engine.spy.P6SpyDriver</property>
  • 已经打开了Hibernate.show_sql属性:<property name="hibernate.show_sql">true</property>

间谍属性

  • 已经更改为使用我的实际数据库JDBC驱动程序,过滤器设置为false,包括已明确设置为记录所有内容的false。
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

最后我放弃了 P6Spy 因为它是旧库,最新版本可以追溯到2003年。我诉诸于使用另一个类似的免费开源软件 log4jdbc 要拦截 JDBC 语句,请参阅 如果您有兴趣,请了解更多信息。

其他提示

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

log4j.category.org.hibernate.type=调试,控制台

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

顺便说一句 - 这个问题已在 2.0-alpha-1 中修复。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top