sql - 如何在 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()
解决方案
我想,答案是你提到的链接。
使用准备好的语句,没有“SQL 查询”:
你有一个语句,包含占位符,它被发送到数据库服务器并在那里准备,这意味着 SQL 语句被“分析”、解析,一些表示它的数据结构在内存中准备好了,然后,你有绑定的变量被发送到服务器并执行准备好的语句——处理这些数据但是没有重建实际的真实 SQL 查询——既不是在 Java 端,也不是在数据库端。
所以,没有办法得到准备好的语句的 SQL——因为没有这样的 SQL。
出于调试目的,解决方案是:
输出语句代码、占位符和数据列表或“手动”“构建”一些 SQL 查询。
推荐阅读
- ios - 以编程方式触发耳机暂停按钮将执行的操作
- reactjs - 如何使用 tab 键在 Material-UI 上选择一个项目?
- r - 选择每第 n 行,偏移开始并重复
- python - 将一种引用类型复制到另一种的效果
- kubernetes - Istio HTTPRedirect 捕获组支持
- regex - 正则表达式查询:删除转义字符但保留字符串中的标点符号
- c# - 如何在 post 方法中将重音字符传递给 REST API
- php - Symfony\Component\Debug\Exception\FatalThrowableError: 参数 2 传递给 Illuminate\Auth\SessionGuard::__construct()
- python - 基于 CIFAR10 数据集类创建数据集时出错
- google-app-engine - 从 AppEngine 到 Cloud Function 的服务帐号身份