【问题标题】:How to get the full query that a PreparedStatement is about to execute in DB2?如何获取 PreparedStatement 即将在 DB2 中执行的完整查询?
【发布时间】:2018-01-20 23:34:46
【问题描述】:

我正在处理一个动态 Web 项目并使用 PreparedStatement 对 DB2 数据库执行 SQL 查询。

String myQuery = "select id from user where name = ?";
PreparedStatement stmt  = connection.prepareStatement(myQuery);
stmt.setString(1, test);
ResultSet resultSet  = statement.executeQuery();

如何在控制台中接收即将在 DB2 服务器上执行的完整 SQL 查询?

【问题讨论】:

  • 取决于驱动程序,这可能有效,也可能无效。试试stmt.toString()。对此没有本机支持。 PreparedStatement 是一个接口,不需要实现这样的功能。
  • 如果您在 java 中没有成功,请与您的 DBA 交谈,他们可以让 DB2 报告动态 SQL 和参数标记变量的值。 DBA 使用的机制取决于运行 DB2 服务器的操作系统(Z/OS、i 系列、Linux/Unix/Windows)以及 DB2 版本。

标签: java eclipse db2 prepared-statement


【解决方案1】:

如果您熟悉 Eclipse 中的调试选项。您可以尝试以下方法:

  1. ResultSet resultSet = statement.executeQuery();处设置断点

  2. 右键单击您的应用程序,例如 Debug As 选择 Java Application(或任何适用于您的情况,即可能是 SpringBoot 应用程序等。

  3. 执行使您获得问题中提到的代码的步骤。

  4. 如果你在Eclipse的Debug Perspective中检查Variables tab,你会发现像myQuerystmt这样的变量(根据你的代码)

  5. 您看到的 stmt 的值就是您需要的完整 SQL 查询。

另外,如果您不想一直查看此变量,您可以尝试Java Logging 并在日志中打印您的完整 SQL 查询。

【讨论】:

  • 感谢rdj7的解决方案,我尝试了以上步骤,现在可以看到预期的结果了。
  • 伟大的@chimbu !!
猜你喜欢
  • 2011-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多