关于获得PrepareStatement中的SQL

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

1,Java没法经过反射获得方法的参数值!因此经过反射拿到参数的路线不做考虑。 java

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

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

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

②经过第三方的相似P6Spy等组件,修改数据源,达到检测所有JDBC操做的功能。这种代价比较大,并且也不适合整合到咱们的perflog中。若是懒得研究相似功能的话,却是能够试试。 .net

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


下面是一些参考资料: htm

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 blog

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

相关文章
相关标签/搜索