2011-12-11 29 views
2

可能重複:
Seeing the underlying SQL in the Spring JdbcTemplate?是否可以輸出使用jdbctemplate發送到mysql的sql?

我使用的JdbcTemplate是這樣的:

getJdbcTemplate.update("update ....... values (?,?,?....?)", myObject.getProperty1(), ...); 

是否有可能對我來說,寫出來的生成的SQL的logger.trace發送到MySQL?

這將使我的調試過程變得更簡單,因爲我可以準確地看到mysql正在獲取什麼。

+0

只是一種替代方法。如果你正在本地或開發環境中運行,查看你的mysql查詢日誌有什麼問題嗎? –

+0

Chris J,沒有什麼不對,只是不知道mysql足以做到這一點。 – Blankman

回答

6

在JDBC URL,就可以動態地添加以下屬性,以使MySQL的語句記錄:

的jdbc:mysql的://本地主機:3306/sakila的profileSQL =真

你可以閱讀更多關於此這裏:

http://dev.mysql.com/doc/connector-j/en/connector-j-reference-configuration-properties.html

閱讀上在調試/仿形部作爲這些的組合的屬性可以是用於日誌級別非常靈活,日誌輸出等(例如記錄器。)

另一種方法是,如http://code.google.com/p/log4jdbc/

2

JdbcTemplate的調試級別日誌查詢使用JDBC日誌代理庫。您只需要在org.springframework.jdbc.core.JdbcTemplate上啓用調試日誌記錄。

您還可以從連接池中獲取查詢日誌記錄。例如,如果您使用的是BoneCP,請打開logStatementsEnabled並設置您的com.jolbox.bonecp記錄器以在調試級別進行記錄。使用BoneCP的日誌記錄的優點是您可以獲取預先準備的語句佔位符值。以下是顯示差異的相同查詢的輸出,其中PreparedStatementHandle是BoneCP類。

[2011-12-11 11:43:25,749] DEBUG Executing prepared SQL query (JdbcTemplate) 
[2011-12-11 11:43:25,753] DEBUG Executing prepared SQL statement [select * from player where player_id = ?] (JdbcTemplate) 
[2011-12-11 11:43:25,794] DEBUG select * from player where player = 123 (PreparedStatementHandle) 
+0

很酷的感謝,profileSQL也顯示了sql的最終結果,其中值取代了實際值。 – Blankman

+0

這種方法的好處是,你使用哪個dbms然後 –

+0

沒關係,我在我的log4j.xml中將調試級別設置爲org.springframework.jdbc.core.JdbcTemplate,但仍然不能正常工作!請建議。 –

相關問題