如何查看PreparedStatement的SQL字符串?

Hik*_*ari 12 java jdbc prepared-statement

当我们创建PreparedStatement时,我们使用'?' 然后用设置的参数替换字符.

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

Esa*_*ija 11

没有最终的SQL字符串,带有占位符的版本是实际发送到服务器的版本.当您在预准备语句上执行查询时,数据将与其完全分开发送.

您可以使用占位符记录字符串,然后单独记录每个数据集.

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

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

...

pstmt.setString(1, "asd");
logSQL( query, "asd");
Run Code Online (Sandbox Code Playgroud)

logSQL然后会实际记录"SELECT a FROM b WHERE c = 'asd'".可能是某人之前已经实现过这个......


Nat*_*hes 5

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