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