一直困扰您的一件事是,当您拥有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错误...
我尝试过log4jdbc,它为我完成了工作。
这是非常依赖数据库的。例如,我知道某些JDBC驱动程序(例如sybase,也许是ms-sql)通过在服务器上创建一个临时存储过程,然后使用提供的参数来调用该过程来处理准备好的语句。因此,实际上不会从客户端实际传递完整的SQL。
使用P6Spy:友好的Oracle,Mysql,JNDI,JMX,Spring
如果使用的是MySQL,则是MySQL连接器的PreparedStatement.toString()does include the bound parameters。尽管第三方连接池可能会破坏这一点。