13

当我们创建 PreparedStatement 时,我们使用“?” 然后将字符替换为设置的参数。

设置好这些参数后,我们如何才能看到最终的 SQL 字符串呢?

4

2 回答 2

11

没有最终的 SQL 字符串,带有占位符的版本是实际发送到服务器的版本。当您对准备好的语句执行查询时,数据完全独立地发送。

您可以使用占位符记录字符串,然后分别记录每个数据集。

如果这是您想要的,您的代码可以将它们在日志中组合成一个实际的 SQL 字符串:

String query = "SELECT a FROM b WHERE c = ?";

...

pstmt.setString(1, "asd");
logSQL( query, "asd");

logSQL然后实际上会记录"SELECT a FROM b WHERE c = 'asd'". 可能是有人以前实际实施过这个......

于 2013-03-21T16:28:23.717 回答
5

最简单的方法(适用于任何 JDBC 驱动程序)是使用log4jdbc。它是一个包装驱动程序的代理,通过组合 SQL 及其参数并记录它来创建可读的 SQL 字符串,然后将 SQL 和参数传递给底层驱动程序。

于 2013-03-21T16:33:58.890 回答