我有一个带有以下方法签名的常规Java方法:
private static ResultSet runSQLResultSet(String sql, Object... queryParams)
它打开一个连接,PreparedStatement使用sql语句和queryParams可变长度数组中的参数构建一个,运行它,缓存ResultSet(在中CachedRowSetImpl),关闭连接,然后返回缓存的结果集。
PreparedStatement
queryParams
ResultSet
CachedRowSetImpl
我在记录错误的方法中有异常处理。我将sql语句记录为日志的一部分,因为它对调试非常有帮助。我的问题是,记录String变量会sql记录带有?而不是实际值的模板语句。我想记录已执行(或尝试执行)的 实际 语句。
sql
所以…有什么方法可以获取将由a运行的实际SQL语句PreparedStatement?( 没有 自己构建它。如果我找不到访问PreparedStatement'sSQL的方法,我可能最终会在自己的catches中最终构建它。)
PreparedStatement's
catch
使用准备好的语句,没有“ SQL查询”:
但是,无论是在Java方面还是在数据库方面,都没有重建实际的实际SQL查询的方法。
因此,由于没有这种SQL,因此无法获取准备好的语句的SQL。
出于调试目的,解决方案是: