gpt4 book ai didi

java - 在 Java 中记录 PreparedStatements

转载 作者:搜寻专家 更新时间:2023-10-30 19:44:57 24 4
gpt4 key购买 nike

当您使用 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 特化。

谢谢!

最佳答案

我试过了 log4jdbc它为我完成了工作。

安全说明:截至 2011 年 8 月的今天,log4jdbc 准备语句的记录结果执行起来并不安全。它们可用于分析,但绝不能反馈到 DBMS。

logjdbc生成的日志

示例:

2010/08/12 16:30:56 jdbc.sqlonly org.apache.commons.dbcp.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:105) 8. INSERT INTO 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 :

<logger name="jdbc.sqlonly" level="DEBUG"/>

可惜它不在 Maven 存储库中,但仍然有用。
根据我的尝试,如果你设置

你只会得到错误的语句,但是,我不知道这个库是否对性能有影响。

关于java - 在 Java 中记录 PreparedStatements,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/218113/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com