用Java记录PreparedStatements

问题描述 投票:14回答:4

一直困扰您的一件事是,当您拥有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专业化类。

谢谢!

一直很麻烦的一件事是,当您具有PreparedStatement而不是查询本身时,记录SQL(JDBC)错误。您总是会收到如下消息:2008-10-20 09:19:48,114错误...

java logging jdbc prepared-statement
4个回答
6
投票

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


3
投票

这是非常依赖数据库的。例如,我知道某些JDBC驱动程序(例如sybase,也许是ms-sql)通过在服务器上创建一个临时存储过程,然后使用提供的参数来调用该过程来处理准备好的语句。因此,实际上不会从客户端实际传递完整的SQL。


3
投票

使用P6Spy:友好的Oracle,Mysql,JNDI,JMX,Spring


0
投票
  1. 如果使用的是MySQL,则是MySQL连接器的PreparedStatement.toString()does include the bound parameters。尽管第三方连接池可能会破坏这一点。

© www.soinside.com 2019 - 2024. All rights reserved.