天天看點

Java 技術篇 - 連接配接oracle資料庫執行sql使用close()關閉createStatement()無效無法清除遊标緩存問題解決,報“ORA-01000: 超出打開遊标的最大數“錯誤解決方法

java.sql.SQLException: ORA-01000: 超出打開遊标的最大數

問題在一個大資料量的嵌套循環下 close() 關閉 createStatement() 根本無效,即使把執行過程封裝在類裡,而用循環來調用類也會有問題。

原因:

close() 後遊标裡緩存的資源并不會被釋放,而是傳回給資料庫連接配接池,直到退出最外層的循環,才會自動被釋放。

解決方案:

方案一: 如果資料庫不是超級大,一般通過直接在資料庫裡調大 open_cursors 遊标參數可解決問題。

方案二: 超大資料量的話,要拆分大量資料為小量的資料,把循環放在類裡進行封裝,最後把結果拼起來就好了。

show parameter open_cursors;

可以檢視遊标的最大值。

alter system set open_cursors=5000 scope=both;

可以設定遊标的最大值。

Java 技術篇 - 連接配接oracle資料庫執行sql使用close()關閉createStatement()無效無法清除遊标緩存問題解決,報“ORA-01000: 超出打開遊标的最大數“錯誤解決方法

喜歡的點個贊❤吧!