【发布时间】:2015-12-22 10:33:13
【问题描述】:
我正在使用PreparedStatements。
当我尝试使用stmt.toString(); 打印查询时,它会在控制台打印以下内容,
com.zaxxer.hikari.proxy.PreparedStatementJavassistProxy
如何打印我的查询?
【问题讨论】:
标签: java sql jdbc prepared-statement tostring
我正在使用PreparedStatements。
当我尝试使用stmt.toString(); 打印查询时,它会在控制台打印以下内容,
com.zaxxer.hikari.proxy.PreparedStatementJavassistProxy
如何打印我的查询?
【问题讨论】:
标签: java sql jdbc prepared-statement tostring
我有一个类似但不相同的问题;我将在此处发布我的解决方案,以防对其他人有用:
当我做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。
【讨论】:
一般来说,PreparedStatement 的 toString() 行为是特定于实现的:Get query from java.sql.PreparedStatement
看起来你所拥有的实际上是 HikariCP 的预准备语句缓存的一部分,它包装了 JDBC 驱动程序自己的 PreparedStatement。要从中取出字符串,您需要访问底层 PreparedStatement 并希望您使用的是支持此功能的驱动程序之一。 (我无法确定这是否可行,看起来 HikariCP 的这个区域已经被大幅重构:github)
【讨论】: