2012-08-23 45 views
0

在Java中,我希望打印出將要在數據庫上提交/查詢的查詢,以便在查詢拋出異常時查看錯誤。Oracle連接preparedStatement對象打印出要執行的查詢

準確定位問題將非常有用,而不是試圖瞭解Oracle異常ID,並嘗試匹配代碼中發生錯誤的位置。請任何幫助。

PreparedStatement ps = conn.prepareStatement("SELECT * FROM EMPLOYEES where EMPNAME=?");
ps.setString(1, "HULK");
ps.executeQuery();

理想我想做一個syso(PS)或syso(ps.getquery)和輸出應該是

SELECT * FROM EMPLOYEES WHERE EMPNAME='HULK'

SELECT * FROM EMPLOYEES WHERE EMPNAME=<HASHCODE OF THE OBJECT YOU ARE TRYING TO BIND>

+0

與帖子相關的代碼。 – kosa

+0

好吧..編寫示例代碼 –

+0

相關問題:http://stackoverflow.com/questions/2683214/get-query-from-java-sql-preparedstatement?lq=1 –

回答

1

我碰到一些有趣的事情,Log4JDBC,它允許你記錄SQL調用。我還沒有機會使用它,但我認爲能夠更改日誌級別並將SQL調用轉換爲日誌文件是一個好主意。

這比你要求的要多,但我認爲這可能是值得拋出的。

0

我覺得這個已經回答了here

簡短回答:打印toString()方法或PrepareStatement查看綁定變量替換爲值的查詢。

但是:它依賴於實現者。並非所有JDBC驅動程序都添加了這種精確性。

如果您的特定驅動程序不符合此要求,那麼唯一的解決方法是通過連接值來組合SQL,而不是使用綁定變量(失去使用綁定變量時RDBMS提供的性能優勢)。

但對於這一點,你要的東西轉換成字符串等

這將是自相矛盾的,因爲我已經發現,串聯SQLS是最容易出錯,而且是最需要的打印和檢查的人。

+0

同意。 MySQL會打印出這些信息,但我正在尋找ORACLE JDBC驅動程序。如果在Oracle中沒有辦法做到這一點,那麼有什麼解決方法嗎? –

+0

我改進了我的回答,以適應您的意見。 –