我有一个拥有java.sql.Connection的超类。有很多子类使用连接来执行选择。
我需要拦截通过连接执行的所有语句,并记录执行的SQL。
我该怎么做?
答案 0 :(得分:9)
使用log4jdbc。它是一个代理JDBC驱动程序,它记录所有SQL并将SQL和参数传递给底层驱动程序。这样你的代码甚至不必知道日志记录,它都包含在第三方库中。
配置主要包括更改JDBC连接字符串以使用代理而不是真实驱动程序,并告诉log4jdbc真正的JDBC驱动程序是什么。然后,在log4j配置中选择日志记录类别,以告知您要记录的内容类型。您可以获取SQL,计时信息,连接打开和关闭事件以及结果集内容。
如果您想深入解释它的工作原理,请参阅Jack Shirazi的书 Java Performance Tuning 。在JDBC章节中有一个构建代理驱动程序的扩展示例。