当前位置: 首页 > 面试题库 >

如何获取PreparedStatement的SQL?

马祺
2023-03-14
问题内容

我有一个带有以下方法签名的常规Java方法:

private static ResultSet runSQLResultSet(String sql, Object... queryParams)

它打开一个连接,PreparedStatement使用sql语句和queryParams可变长度数组中的参数构建一个,运行它,缓存ResultSet(在中CachedRowSetImpl),关闭连接,然后返回缓存的结果集。

我在记录错误的方法中有异常处理。我将sql语句记录为日志的一部分,因为它对调试非常有帮助。我的问题是,记录String变量会sql记录带有?而不是实际值的模板语句。我想记录已执行(或尝试执行)的
实际 语句。

所以…有什么方法可以获取将由a运行的实际SQL语句PreparedStatement?( 没有
自己构建它。如果我找不到访问PreparedStatement'sSQL的方法,我可能最终会在自己的catches中最终构建它。)


问题答案:

使用准备好的语句,没有“ SQL查询”:

  • 您有一个包含占位符的语句
    • 它被发送到数据库服务器
    • 并在那里准备
    • 这意味着SQL语句已“分析”,解析,并在内存中准备了一些表示它的数据结构
  • 然后,您有绑定变量
    • 发送到服务器
    • 然后执行准备好的语句-处理这些数据

但是,无论是在Java方面还是在数据库方面,都没有重建实际的实际SQL查询的方法

因此,由于没有这种SQL,因此无法获取准备好的语句的SQL。

出于调试目的,解决方案是:

  • 输出语句代码,占位符和数据列表
  • 或“手动”“构建”一些SQL查询。


 类似资料:
  • 问题内容: 我有一个带有以下方法签名的常规Java方法: 它打开一个连接,使用sql语句和可变长度数组中的参数构建一个a ,运行它,对进行缓存(在中),关闭连接,并返回缓存的结果集。 我在记录错误的方法中有异常处理。我将sql语句记录为日志的一部分,因为它对调试非常有帮助。我的问题是,记录String变量会sql用?代替实际值记录模板语句。我想记录已执行(或尝试执行)的实际语句。 所以…有没有办法

  • 问题内容: 我正在为SQLException编写通用记录器,我想获取传递给PreparedStatement的参数,该怎么做?我能够得到他们的数量。 问题答案: 简短的回答:不能。 长答案:所有JDBC驱动程序都会将参数值保留在某个地方,但是没有标准的方法来获取它们。 如果要出于调试或类似目的而打印它们,则有几种选择: 创建一个传递JDBC驱动程序(使用p6spy或log4jdbc作为基础),该驱

  • 问题内容: 我正在尝试连接到数据库,运行查询并打印出查询。到目前为止,我已经完成了工作,但是我需要获取输出并将其中的特定部分分配给 我正在使用log4jdbc监视我的查询。 此刻,我得到如下记录的输出: 我想分配给。我该怎么做呢? 问题答案: 通常,a 将为您提供查询(包括绑定参数)。但这取决于的实际实现(例如,使用PostgreSQL隐式实现)。 您提到为您带来回报。我对 log4jdbc 并不

  • 我使用的是Spring的(Spring版本4.1.4)。对于我的类“JdbcTemplate”实例,我正在将select查询作为一个准备好的语句。但是,我的查询意外地没有返回任何结果。因此,我确实需要调试我的查询,并确保查询是我期望的。 如何取回作为< code>JdbcTemplate的内部< code>PreparedStatement的一部分对数据库执行的实际SQL? 我熟悉使用预制语句的

  • ThinkCMF获取方式: 官方网站 :http://www.thinkcmf.com可获取最新版本 git@osc :http://git.oschina.net/thinkcmf/ThinkCMFX github :https://github.com/thinkcmf/cmfx

  • 问题内容: 您使用什么函数在PHP DOM实现中获取给定DOMNode的innerHTML?有人可以提供可靠的解决方案吗? 当然,outerHTML也可以。 问题答案: 比较与此更新变种PHP手册用户注意#89718: 例: