在 Java 中将 SQL 查询从 PreparedStatement 打印到控制台
Posted
技术标签:
【中文标题】在 Java 中将 SQL 查询从 PreparedStatement 打印到控制台【英文标题】:Print SQL query from PreparedStatement to console in Java 【发布时间】:2015-12-22 10:33:13 【问题描述】:我正在使用PreparedStatements
。
当我尝试使用stmt.toString();
打印查询时,它会在控制台打印以下内容,
com.zaxxer.hikari.proxy.PreparedStatementJavassistProxy
如何打印我的查询?
【问题讨论】:
检查这个:***.com/questions/34412289/… ***.com/questions/2683214/… 【参考方案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。
【讨论】:
【参考方案2】:一般来说,PreparedStatement 的 toString()
行为是特定于实现的:Get query from java.sql.PreparedStatement
看起来你所拥有的实际上是 HikariCP 的预准备语句缓存的一部分,它包装了 JDBC 驱动程序自己的 PreparedStatement。要从中取出字符串,您需要访问底层 PreparedStatement 并希望您使用的是支持此功能的驱动程序之一。 (我无法确定这是否可行,看起来 HikariCP 的这个区域已经被大幅重构:github)
【讨论】:
以上是关于在 Java 中将 SQL 查询从 PreparedStatement 打印到控制台的主要内容,如果未能解决你的问题,请参考以下文章
无法在 Android 中将 java 字符串转换为 JSON 数组
Android Multimedia框架总结MediaPlayer中从Java层到C++层类关系及prepare及之后其他过程