在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>
答案 0 :(得分:1)
我遇到了一些有趣的事情Log4JDBC,它允许您记录SQL调用。我还没有机会使用它,但我认为能够更改日志记录级别并将SQL调用放入日志文件是个好主意。
这比你要求的要多,但我认为可能值得抛弃。
答案 1 :(得分:0)
我认为已经回答here。
简答:打印toString()方法或PrepareStatement以查看用值替换绑定变量的查询。
但是:它取决于实现者。并非所有JDBC驱动程序都能提供这种精确性。
如果您的特定驱动程序不符合此要求,那么唯一的解决方法是通过连接值而不是使用绑定变量来组成SQL(在使用绑定变量时会丢失RDBMS为您提供的性能优势)。
但为此你必须把东西转换成字符串等。
这是矛盾的,因为我发现连接的SQL最容易出错,并且是需要大多数打印和检查的。