当我们创建PreparedStatement时,我们使用'?'然后用设置的参数替换字符。
在设置这些参数后,我们如何看到最终的SQL字符串?
答案 0 :(得分: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'"
。 Could be that someone has actually implemented this before...
答案 1 :(得分:5)
最简单的方法(适用于任何JDBC驱动程序)是使用log4jdbc。它是一个包装驱动程序的代理,通过组合SQL及其参数创建一个可读的SQL字符串并记录它,然后将SQL和参数传递给底层驱动程序。