在创建PreparedStatement时,我们使用'?'字符,然后将其替换为设置的参数。
在设置了这些参数后,我们如何查看最终的SQL字符串呢?
在创建PreparedStatement时,我们使用'?'字符,然后将其替换为设置的参数。
在设置了这些参数后,我们如何查看最终的SQL字符串呢?
没有最终的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'"
。或许之前已经有人实现过这个功能,详情请见此处。
最简单的方法(适用于任何JDBC驱动程序)是使用log4jdbc。 它是一个代理,包装了驱动程序,通过组合SQL和其参数创建可读的SQL字符串并将其记录下来,然后将SQL和参数传递给底层驱动程序。