Oracle出現(xiàn)超出打開游標最大數(shù)的解決方法
本文實例講述了Oracle出現(xiàn)超出打開游標最大數(shù)的解決方法。分享給大家供大家參考,具體如下:
Java代碼在執(zhí)行conn.createStatement()和conn.prepareStatement()的時候,實際上都是相當與在數(shù)據(jù)庫中打開了一個cursor。尤其是,假如你的createStatement和prepareStatement是在一個循環(huán)里面的話,就會非常輕易出現(xiàn)這個問題。因為游標一直在不停的打開,而且沒有關(guān)閉。
一般來說,我們在寫Java代碼的時候,createStatement和prepareStatement都應(yīng)該要放在循環(huán)外面,而且使用了這些Statment后,及時關(guān)閉。最好是在執(zhí)行了一次executeQuery、executeUpdate等之后,假如不需要使用結(jié)果集(ResultSet)的數(shù)據(jù),就馬上將Statement或PreparedStatement關(guān)閉。
對于出現(xiàn)ORA-01000錯誤這種情況,單純的加大open_cursors并不是好辦法,那只是治標不治本。實際上,代碼中的隱患并沒有解除。而且,絕大部分情況下,open_cursors只需要設(shè)置一個比較小的值,就足夠使用了,除非有非常非凡的要求。
假如你不使用連接池,那么就沒有什么問題,一旦Connection關(guān)閉,數(shù)據(jù)庫物理連接就被釋放,所有相關(guān)Java資源也可以被GC回收了。
但是假如你使用連接池,那么請注重,Connection關(guān)閉并不是物理關(guān)閉,只是歸還連接池,所以PreparedStatement和ResultSet都被持有,并且實際占用相關(guān)的數(shù)據(jù)庫的游標資源,在這種情況下,只要長期運行,往往就會報“游標超出數(shù)據(jù)庫答應(yīng)的最大值”的錯誤,導(dǎo)致程序無法正常訪問數(shù)據(jù)庫。
正確的代碼,如下所示:
for(int i=0;i<balancelist.size();i++) { prepstmt = conn.prepareStatement(sql[i]); prepstmt.setBigDecimal(1,nb.getRealCost()); prepstmt.setString(2, adclient_id); prepstmt.setString(3, daystr); prepstmt.setInt(4, ComStatic.portalId); prepstmt.executeUpdate(); //循環(huán)到一定數(shù)量就要關(guān)閉,防止出現(xiàn)超出最大游標數(shù)量 prepstmt.close(); }
希望本文所述對大家Oracle數(shù)據(jù)庫程序設(shè)計有所幫助。
相關(guān)文章
Oracle數(shù)據(jù)遠程連接的四種設(shè)置方法和注意事項
Oracle數(shù)據(jù)庫的遠程連接可以通過多種方式來實現(xiàn),本文我們主要介紹四種遠程連接的方法和注意事項,并通過示例來說明,接下來我們就開始介紹2014-04-04oracle創(chuàng)建數(shù)據(jù)庫和用戶的方法
這篇文章主要介紹了oracle創(chuàng)建數(shù)據(jù)庫和用戶的方法,mysql和sqlserver創(chuàng)建數(shù)據(jù)庫可以直接通過create database “數(shù)據(jù)庫名”,而oracle創(chuàng)建數(shù)據(jù)庫要對應(yīng)一個用戶,數(shù)據(jù)庫和用戶一般是一一對應(yīng)的,下面把oracle創(chuàng)建數(shù)據(jù)庫和用戶的步驟分享給大家。2015-07-07oracle的導(dǎo)入導(dǎo)出注意事項及心得分享
導(dǎo)入導(dǎo)出oracle方案是備份和恢復(fù)的主旋律,有一點點在使用過程中的體會,在此與大家分享下,希望對大家有所幫助2013-09-09oracle數(shù)據(jù)匹配merge into的實例詳解
這篇文章主要介紹了oracle數(shù)據(jù)匹配merge into的實例詳解的相關(guān)資料,希望通過本文能幫助到大家,需要的朋友可以參考下2017-10-10實現(xiàn)oracle數(shù)據(jù)庫字段自增長(兩種方式)
這篇文章主要通過兩種方式實現(xiàn)oracle數(shù)據(jù)庫字段自增長,第一種方式是序列+觸發(fā)器,第二種方式序列+顯示調(diào)用序列,需要的朋友可以參考下2015-07-07