首页 > 解决方案 > 如何在 Apache Derby 中从 JDBC 获取 SQL 查询?

问题描述

我正在使用Apache Derby。我想从 JDBC 程序中提取查询。我知道这些行中的问题已经被问到(如何获得 PreparedStatement 的 SQL?)。但是这个问题是特定于 Apache Derby 的。

PreparedStatement stmt = conn.prepareStatement(
          "SELECT * FROM EMPLOYEE 
           WHERE SALARY BETWEEN ? AND ?");
stmt.setInt(1, 1000);
stmt.setInt(2, 100000);

编辑

在上述代码片段的这一点之后,有没有办法在不执行数据库的情况下获取实际查询?

我不想PreparedStatement在数据库中执行。即不使用stmt.execute() or stmt.executeQuery()

标签: sqljdbcderby

解决方案


我想,答案是你提到的链接。

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

你有一个语句,包含占位符,它被发送到数据库服务器并在那里准备,这意味着 SQL 语句被“分析”、解析,一些表示它的数据结构在内存中准备好了,然后,你有绑定的变量被发送到服务器并执行准备好的语句——处理这些数据但是没有重建实际的真实 SQL 查询——既不是在 Java 端,也不是在数据库端。

所以,没有办法得到准备好的语句的 SQL——因为没有这样的 SQL。

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

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


推荐阅读