拦截JDBC连接

Luc*_*cia 6 java jdbc

我有一个拥有java.sql.Connection的超类.有很多子类使用连接来执行选择.

我需要拦截通过连接执行的所有语句,并记录执行的SQL.

我该怎么做?

Nat*_*hes 9

使用log4jdbc.它是一个代理JDBC驱动程序,它记录所有SQL并将SQL和参数传递给底层驱动程序.这样你的代码甚至不必知道日志记录,它都包含在第三方库中.

配置主要包括更改JDBC连接字符串以使用代理而不是真实驱动程序,并告诉log4jdbc真正的JDBC驱动程序是什么.然后,在log4j配置中选择日志记录类别,以告知您要记录的内容类型.您可以获取SQL,计时信息,连接打开和关闭事件以及结果集内容.

如果你想深入解释它是如何工作的,请参阅Jack Shirazi的书" Java Performance Tuning".在JDBC章节中有一个构建代理驱动程序的扩展示例.