当前位置:  开发笔记 > 编程语言 > 正文

使用Java记录PreparedStatements

如何解决《使用Java记录PreparedStatements》经验,为你挑选了1个好方法。

有一件事总是令人痛苦的是,当您有PreparedStatement而不是查询本身时,记录SQL(JDBC)错误.

你总是得到如下消息:

2008-10-20 09:19:48,114 ERROR LoggingQueueConsumer-52 [Logger.error:168] Error 
executing SQL: [INSERT INTO private_rooms_bans (room_id, name, user_id, msisdn, 
nickname) VALUES (?, ?, ?, ?, ?) ON DUPLICATE KEY UPDATE room_id = ?, name = ?, 
user_id = ?, msisdn = ?, nickname = ?]

当然,我可以编写一个辅助方法来检索值并用真实值解析/替换问号(如果我没有得到这个问题的结果,可能会沿着那条路走下去),但我只是想知道是否这个问题之前由其他人解决了和/或是否有任何通用的日志记录助手可以自动为我做这件事.

几个答案后编辑:

到目前为止提供的库似乎适合于记录调试语句,这无疑是有用的.但是,我正在寻找一种方法来获取PreparedStatement本身(不是某些子类)并在发生错误时记录其SQL语句.我不想部署具有PreparedStatement备用实现的生产应用程序.

我想我正在寻找一个实用工具类,而不是PreparedStatement专业化.

谢谢!



1> 小智..:

我尝试了log4jdbc,它为我完成了这项工作.

安全注意:截至2011年8月,log4jdbc预处理语句的记录结果不安全.它们可用于分析,但绝不应反馈到DBMS中.

实施例通过logjdbc生成的日志的:

2010/08/12 16:30:56 jdbc.sqlonly org.apache.commons.dbcp.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:105)8.插入A_TABLE(ID_FILE,CODE1,ID_G,ID_SEQUENCE,REF,NAME,BAR ,DRINK_ID,AMOUNT,DESCRIPTION,STATUS,CODE2,REJECT_DESCR,ID_CUST_REJ)VALUES(2,'123',1,'2','aa','awe',null,'0123','4317.95,'Rccc',' 0' ,NULL,NULL,NULL)

该库非常易于设置:


我使用HSQLDB配置:

jdbc.url=jdbc:log4jdbc:hsqldb:mem:sample

使用Oracle:

jdbc.url=jdbc:log4jdbc:oracle:thin:@mybdd:1521:smt
jdbc.driverClass=net.sf.log4jdbc.DriverSpy

logback.xml:


太糟糕了,它不是在maven存储库上,但仍然有用.
从我尝试过,如果你设置

您只会错误地获取语句,但是,我不知道此库是否会对性能产生影响.

推荐阅读
保佑欣疼你的芯疼
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有