【发布时间】:2020-12-28 19:29:56
【问题描述】:
我正在使用PreparedStatement 来构建我的查询,但我想在执行它之前替换所有变量(替换'?')之后打印最终语句,显然我需要的方法是PreparedStatement#toString() 例如这样
PreparedStatement query = connection.prepareStatement(select ? from ?);
System.out.println("Before : " + query.toString());
query.setString(1, column);
query.setString(2, table);
System.out.println("After : " + query.toString());
输出应该是这样的:
Before : com.mysql.jdbc.JDBC4PreparedStatement@fa9cf: SELECT ** NOT SPECIFIED ** FROM ** NOT SPECIFIED **
After : com.mysql.jdbc.JDBC4PreparedStatement@fa9cf: SELECT column FROM table
但我得到的是
Before : com.mysql.jdbc.JDBC4PreparedStatement@fa9cf
After : com.mysql.jdbc.JDBC4PreparedStatement@fa9cf
不知道怎么回事
【问题讨论】:
-
使用
.asSql()。 -
顺便说一句:你不能有一个?对于表名:stackoverflow.com/questions/11312155/… - 在创建准备好的语句之前必须确定表名。
-
通常数据库允许在某种程度上记录所有查询。
ParameterMetaData meta = stmt.getParameterMetaData();也可能有用。 -
您是否尝试通过普通 jdbc 执行此操作并且您需要记录此语句,或者您正在使用任何框架,如 spring jpa/hibernate。根据框架的使用情况,您可以为 sql 启用跟踪日志。
-
Oracle 与 mysql.jdbc?老实说,我不知道我在用别人的电脑
标签: java mysql jdbc prepared-statement