2013-03-21 102 views
12

當我們創建一個PreparedStatement時,我們使用'?'字符然後被設置的參數替換。如何查看PreparedStatement的SQL字符串?

如何在設置這些參數後看到最終的SQL字符串?

+0

請參見:[如何獲取PreparedStatement的SQL?](http://stackoverflow.com/questions/2382532/how-can-i-get-the-sql-of-a-preparedstatement) – Reimeus 2013-03-21 16:28:10

回答

5

最簡單的方法(適用於任何JDBC驅動程序)是使用log4jdbc。它是一個包裝驅動程序的代理,通過組合SQL及其參數創建可讀的SQL字符串並將其記錄下來,然後將SQL和參數傳遞給底層驅動程序。

11

沒有最終的SQL字符串,帶佔位符的版本是實際發送給服務器的內容。當您在準備好的語句上執行查詢時,數據將完全獨立發送。

您可以用佔位符記錄字符串,然後單獨記錄每個數據集。然後

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

... 

pstmt.setString(1, "asd"); 
logSQL(query, "asd"); 

logSQL是否實際"SELECT a FROM b WHERE c = 'asd'":如果這就是你想要什麼

你的代碼可以在日誌中結合他們的實際的SQL字符串。 Could be that someone has actually implemented this before...

相關問題