有没有办法从PreparedStatement获取Oracle查询。我知道它不可能这样我不能使用log4jdbc或p6spy,因为它是一个安全的应用程序,使用它会产生更大的问题.. toString将无法正常工作因为我正在使用Oracle?我也无法将PreparedStatement更改为Statement。
答案 0 :(得分:2)
如果只需要调试时间,那么您可以按照此article
使用DebuggableStatement答案 1 :(得分:1)
我认为你不应该这样做,因为没有官方记录的API。
如果你可以搞乱代码,为什么不能使用log4jdbc? Oracle JDBC也是supports java.util.logging,您可以尝试启用它。
如果您只对SQL本身感兴趣,可以在Oracle服务器上启用会话跟踪。
或许您可以将代码放到准备语句的位置(使用像@pinichi这样的建议)?
但只是为了好玩,用调试器,我的Oracle JDBC版本,我可以做到
if (stmt instanceof oracle.jdbc.driver.OraclePreparedStatement) {
String x = ((oracle.jdbc.driver.OraclePreparedStatement) stmt)
.getOriginalSql();
System.out.println(x);
}
答案 2 :(得分:1)
如果您只想查看SQL语句,还可以直接访问数据库并检查v$sql
表。
在那里,您可以找到有关查询的所有sqls和其他信息。更多信息:http://download.oracle.com/docs/cd/B19306_01/server.102/b14237/dynviews_2113.htm