Java 如何获取PreparedStatement的SQL?
我有一个带有以下方法签名的常规Java方法:
private static ResultSet runSQLResultSet(String sql, Object... queryParams)
它打开一个连接,PreparedStatement
使用sql语句和queryParams
可变长度数组中的参数构建一个a ,运行它,对进行缓存ResultSet
(在中CachedRowSetImpl
),关闭连接,并返回缓存的结果集。
我在记录错误的方法中有异常处理。我将sql语句记录为日志的一部分,因为它对调试非常有帮助。我的问题是,记录String变量会sql用?代替实际值记录模板语句。我想记录已执行(或尝试执行)的实际语句。
所以…有没有办法获取将由a运行的实际SQL语句PreparedStatement
?(没有自己构建它。如果我找不到访问PreparedStatement'sSQL
的方法,我可能最终会在自己的catches中最终构建它。)
回答:
使用准备好的语句,没有“ SQL查询”:
- 你有一个包含占位符的语句
- 它被发送到数据库服务器
- 并在那里准备
- 这意味着SQL语句已“分析”,解析,并在内存中准备了一些表示它的数据结构
- 然后,你有绑定变量
- 发送到服务器
- 然后执行准备好的语句-处理这些数据
但是,无论是在Java方面还是在数据库方面,都没有重建实际的实际SQL查询的方法。
因此,没有办法获取准备好的语句的SQL,因为没有这样的SQL。
出于调试目的,解决方案是:
- 输出语句代码,占位符和数据列表
- 或“手动”“构建”一些SQL查询。
以上是 Java 如何获取PreparedStatement的SQL? 的全部内容, 来源链接: utcz.com/qa/433755.html