我正在使用PreparedStatements
。
当我尝试使用stmt.toString();
打印查询时,它会打印到控制台后面,
com.zaxxer.hikari.proxy.PreparedStatementJavassistProxy
如何打印查询?
答案 0 :(得分:1)
通常,PreparedStatement的toString()
行为是特定于实现的:Get query from java.sql.PreparedStatement
看起来你所拥有的实际上是HikariCP准备好的语句缓存的一部分,它包装了JDBC驱动程序自己的PreparedStatement。要从中获取字符串,您需要访问底层的PreparedStatement并希望您使用其中一个支持此功能的驱动程序。 (我很难搞清楚这是否可能,看起来HikariCP的这个区域已经被大量重构:github)
答案 1 :(得分:1)
我有类似但不完全相同的问题;我会在这里发布我的解决方案,以防它对其他人有用:
当我做System.out.println(stmt.toString());
时,我会得到:
" HikariProxyPreparedStatement @ 172796470包装com.mysql.jdbc.JDBC42PreparedStatement@268fac52:SELECT。 。 。 (此处查询的其余部分)"
但经过一些实验后我将其改为
System.out.println(stmt.unwrap(com.mysql.jdbc.JDBC42PreparedStatement.class).asSql());
现在我只得到了查询。 unwrap()方法返回底层的JDBC PreparedStatement。