结合

2015-04-23 54 views
1

我使用准备好的声明中这样结合

PreparedStatement pstmt = getConnection().prepareStatement(INSERT_QUERY); 
     pstmt.setInt(1,userDetails.getUsersId()); 

log.debug("SQL for inserting child transactions " + pstmt.toString()); 

我想结合到日志文件后记录的确切的SQL语句,但这个东西是不工作后,如何让准备好的语句查询。它记录的东西就像SQLServerPreparedStatement:7。我在网上搜索,但没有得到满意的答案。任何帮助将不胜感激。

+0

这取决于正在使用的JDBC驱动程序(和DBMS)。有些人在调用PreparedStatement.toString()时显示绑定变量,有些则不显示。如果你有一个不是唯一选项的驱动程序,那就是编写一个捕获'setXXX()'方法并存储参数值的包装器。 –

回答

-1

你可以编写一个实用函数来替换'?'与绑定变量。

+0

我正在寻找一些通用答案先生。这似乎是一些解决办法。 – user3681970

0

您可以尝试通过设置在DriverManager的一个PrintWriter使JDBC内部记录。 Log4j2提供了一个IO Streams module,因此您可以将输出包含在正常的日志文件中。示例代码:

PrintWriter logger = IoBuilder.forLogger(DriverManager.class) 
     .setLevel(Level.DEBUG) 
     .buildPrintWriter(); 
DriverManager.setLogWriter(logger); 

此外,各个JDBC驱动程序通常提供专有的日志记录机制,通常启用系统属性。有关详细信息,您需要查阅特定驱动程序的文档。