我想在使用Oracle JDBC時實現使用實際綁定參數記錄所有已執行的語句。而且我更喜歡我可以創建只傳遞PreparedStatement對象作爲參數的日誌記錄方法。如何從Oracle JDBC PreparedStatement對象中獲取綁定參數的值
例如我已經創建了PreparedStatement和已綁定一個參數
PreparedStatement ps = conn.prepareStatement(
"SELECT * FROM employees WHERE employee_id = ?");
ps.setInt(1,1);
現在我想可以從PS得到實際的SQL語句「SELECT * FROM僱員WHERE employe_id = 1」,我可以放入日誌文件。
到目前爲止,我發現我可以使用
((oracle.jdbc.driver.OracleStatement) ps).getOriginalSql()
得到
SELECT * FROM employees WHERE employe_id = ?
現在我需要一些方法來擺脫目前的PS綁定變量的列表,以便我能更換?帶有綁定參數值。我試圖查看ps.getClass()。getDeclaredFields()和ps.getClass()。getSuperclass()。getDeclaredFields(),但到目前爲止找不到綁定參數值及其類型存儲的位置。
任何建議在哪裏尋找他們?
我仍然需要從PreparedStatement中生成它。我需要一個庫,除了MySQL和PostgreSQL以及其他數據庫之外,我還需要添加Oracle支持,並且日誌記錄功能只接受PreparedStatement對象作爲參數。 在MySQL和PostgreSQL JDBC驅動程序中,如果您在PreparedStatement對象上調用toString(),那麼它會返回包含綁定參數的SQL - 我需要爲Oracle實現類似的功能。 – 2009-07-15 11:55:04
那麼也許改變圖書館本身以這種方式工作呢?除此之外,開始調試你的oracle代碼並打破預備的語句。然後查看結構並找到它存儲值的私有位置。 – akarnokd 2009-07-15 12:01:45