preparestatment获取sql_关于得到PrepareStatement中的SQL

昨天刚完成现有将DB Query集成到我们的perflog的功能,粒度细化到每一次executeQuery,Tim琢磨着能不能把sql也留在我们的perflog中,他指了几条路,我来研究这部分。记录下研究的结果。

1,Java无法通过反射得到方法的参数值!所以通过反射拿到参数的路线不作考虑。

2,Java的PrepareStatement中并未包含得到SQL参数的方法,各种输出都是对象,同样放弃这条路。

参考各处的实现,大概有两个思路:

①新建MyPrepareStatement类,将SQL参数作为变量记录下来,或者在execureQuery时将SQL打印出来。这种改动比较大,且不适合集成到我们的perflog中,如果仅是在serverlog中记录的话,可以考虑。

②通过第三方的类似P6Spy等组件,修改数据源,达到检测全部JDBC操作的功能。这种代价比较大,而且也不适合整合到我们的perflog中。如果懒得研究类似功能的话,倒是可以试试。

ps.原来用Hibernate时,通过ShowSQL等配置,可以打印执行的SQL参数;不知道用Hibernate/MyBatis的整合起来有多困难,可能会容易些吧。我们要做的尽量减少依赖和侵入,从源头入手还真挺麻烦的。

下面是一些参考资料:

http://www.javaworld.com/javaworld/jw-01-2002/jw-0125-overpower.html

http://www.javaworld.com.tw/roller/jiaming/entry/2007_4_13_PreparedStatement_Proxy_Design_Pattern

http://blog.csdn.net/authorzhh/article/details/6931050

http://www.blogjava.net/crazycy/archive/2006/07/22/59581.html

http://www.cnblogs.com/opaljc/archive/2012/03/10/2389351.html

http://doc.java.sun.com/DocWeb/api/java.sql.PreparedStatement

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值