Oracle连接preparedStatement对象打印出要执行的查询

时间:2012-08-23 14:06:08

标签: java database oracle prepared-statement

在Java中,我想打印出要在数据库上提交/查询的查询,这样我就能看到查询抛出异常时的错误。

准确定位问题而不是尝试理解Oracle异常ID并尝试匹配代码中失败的确切位置将非常有用。请帮忙。

PreparedStatement ps = conn.prepareStatement("SELECT * FROM EMPLOYEES where EMPNAME=?");
ps.setString(1, "HULK");
ps.executeQuery();

理想情况下我想做一个syso(ps)或syso(ps.getquery),输出应该是

SELECT * FROM EMPLOYEES WHERE EMPNAME='HULK'

SELECT * FROM EMPLOYEES WHERE EMPNAME=<HASHCODE OF THE OBJECT YOU ARE TRYING TO BIND>

2 个答案:

答案 0 :(得分:1)

我遇到了一些有趣的事情Log4JDBC,它允许您记录SQL调用。我还没有机会使用它,但我认为能够更改日志记录级别并将SQL调用放入日志文件是个好主意。

这比你要求的要多,但我认为可能值得抛弃。

答案 1 :(得分:0)

我认为已经回答here

简答:打印toString()方法或PrepareStatement以查看用值替换绑定变量的查询。

但是:它取决于实现者。并非所有JDBC驱动程序都能提供这种精确性。

如果您的特定驱动程序不符合此要求,那么唯一的解决方法是通过连接值而不是使用绑定变量来组成SQL(在使用绑定变量时会丢失RDBMS为您提供的性能优势)。

但为此你必须把东西转换成字符串等。

这是矛盾的,因为我发现连接的SQL最容易出错,并且是需要大多数打印和检查的。