将PreparedStatement中的SQL查询打印到Java中的控制台

时间:2015-12-22 10:33:14

标签: java sql jdbc prepared-statement tostring

我正在使用PreparedStatements

当我尝试使用stmt.toString();打印查询时,它会打印到控制台后面,

com.zaxxer.hikari.proxy.PreparedStatementJavassistProxy

如何打印查询?

2 个答案:

答案 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。