結合

2015-04-23 37 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驅動程序通常提供專有的日誌記錄機制,通常啓用系統屬性。有關詳細信息,您需要查閱特定驅動程序的文檔。