JDBC用ResultSet訪問大量資料時會遇到的問題

fanfan_618發表於2019-03-14

      我們經常需要JDBC來對資料庫就行操作,一般流程為連線資料庫、通過sql語句把需要的資料取出來儲存到ResultSet,然後呼叫ResultSet方法的類似 getString,getInt()等方法來取出ResultSet中的資料。當資料量比較小的時候,這種訪問方式可以正常執行。但是當資料量很大的時候,在對ResultSet中的部分資料完成訪問後會丟擲異常(JDBC遊標超過限制出現ORA-01000 )。

出現該問題的可能原因如下:

1、java程式碼在執行createStatement和prepareStatement的時候,實際上都是相當與資料庫中開啟了一個cursor,尤其是如果createStatement和prepareStatement在迴圈內部的話,一直使用不關閉非常容易出錯。

2、使用getString函式的執行方式:程式會一次性把資料都放到記憶體裡,然後通過呼叫ResultSet的next、getString等方法取資料,當資料量太大導致記憶體放不下的時候這種方式就會報錯。因此可以改用getObject方法來訪問ResultSet,然後把訪問到的Object再轉換成指定的型別(getObject的執行模式:資料不一次性全部讀入記憶體,而是存在與資料庫中,每次呼叫getObject都是直接從資料庫中取資料,因此可以正常執行)

相關文章