0

在 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>

4

2 回答 2

1

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

这比你要求的要多,但我认为它可能值得扔在那里。

于 2012-08-23T14:30:58.333 回答
0

我认为这已经在这里得到了回答。

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

但是:这完全取决于实施者。并非所有的 JDBC 驱动程序都添加了这种功能。

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

但为此,您必须将内容转换为字符串等。

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

于 2012-08-23T14:26:18.420 回答