我正在審查Oracle數據庫上CLOB處理的一些舊的Java/JDBC代碼。現有的代碼使用類似於this question中提到的方法。使用SetBigStringTryClob處理CLOB與Oracle JDBC的性能影響
我發現an article,指出:
在此之前的Oracle JDBC 10g中,操縱在JDBC CLOB數據,使用甲骨文擴展類oracle.sql.CLOB。但是現在,Oracle JDBC 10g具有一些增強功能,可以簡化JDBC應用程序中的CLOB操作。這使得能夠使用一些可用的標準API來處理大數據,而不是使用Oracle擴展類。
文章給出關於這個改進的細節如下信息:
默認情況下,該方法了PreparedStatement.setString()將允許字符串處理多達32765個字節。爲了插入大於32765字節的數據,可以設置新引入的Connection屬性 - SetBigStringTryClob。這會強制prepareStatement.setString()使用另一個新引入的方法OraclePreparedStatement.setStringForClob()。
但是它警告說:
...處理大量數據的這種方式可能不是一個明智的;流式傳輸數據是更好的選擇。
但上面是該文章中唯一與性能相關的警告。 我的問題是,如果我的代碼中的所有CLOB訪問都是已經通過String對象完成,我是否應該擔心此方法更改可能導致的任何其他潛在性能問題?換句話說,我的應用程序沒有使用流媒體提供的好處,因爲它已經總是在String對象中加載CLOB,所以上面的警告可能會被忽略,因爲我們目前並不瞄準性能改進。是否有任何其他與性能相關的問題可能因切換到此技術而出現?
我澄清了我的問題。我不關心使用內存字符串的實際性能影響,因爲該應用程序已經在執行此操作。我擔心的是這種方法改變可能導致的任何其他隱藏的性能問題。 – 2010-12-23 14:10:46