Oracle出現(xiàn)超出打開(kāi)游標(biāo)最大數(shù)的解決方法
本文實(shí)例講述了Oracle出現(xiàn)超出打開(kāi)游標(biāo)最大數(shù)的解決方法。分享給大家供大家參考,具體如下:
Java代碼在執(zhí)行conn.createStatement()和conn.prepareStatement()的時(shí)候,實(shí)際上都是相當(dāng)與在數(shù)據(jù)庫(kù)中打開(kāi)了一個(gè)cursor。尤其是,假如你的createStatement和prepareStatement是在一個(gè)循環(huán)里面的話,就會(huì)非常輕易出現(xiàn)這個(gè)問(wèn)題。因?yàn)橛螛?biāo)一直在不停的打開(kāi),而且沒(méi)有關(guān)閉。
一般來(lái)說(shuō),我們?cè)趯?xiě)Java代碼的時(shí)候,createStatement和prepareStatement都應(yīng)該要放在循環(huán)外面,而且使用了這些Statment后,及時(shí)關(guān)閉。最好是在執(zhí)行了一次executeQuery、executeUpdate等之后,假如不需要使用結(jié)果集(ResultSet)的數(shù)據(jù),就馬上將Statement或PreparedStatement關(guān)閉。
對(duì)于出現(xiàn)ORA-01000錯(cuò)誤這種情況,單純的加大open_cursors并不是好辦法,那只是治標(biāo)不治本。實(shí)際上,代碼中的隱患并沒(méi)有解除。而且,絕大部分情況下,open_cursors只需要設(shè)置一個(gè)比較小的值,就足夠使用了,除非有非常非凡的要求。
假如你不使用連接池,那么就沒(méi)有什么問(wèn)題,一旦Connection關(guān)閉,數(shù)據(jù)庫(kù)物理連接就被釋放,所有相關(guān)Java資源也可以被GC回收了。
但是假如你使用連接池,那么請(qǐng)注重,Connection關(guān)閉并不是物理關(guān)閉,只是歸還連接池,所以PreparedStatement和ResultSet都被持有,并且實(shí)際占用相關(guān)的數(shù)據(jù)庫(kù)的游標(biāo)資源,在這種情況下,只要長(zhǎng)期運(yùn)行,往往就會(huì)報(bào)“游標(biāo)超出數(shù)據(jù)庫(kù)答應(yīng)的最大值”的錯(cuò)誤,導(dǎo)致程序無(wú)法正常訪問(wèn)數(shù)據(jù)庫(kù)。
正確的代碼,如下所示:
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)超出最大游標(biāo)數(shù)量
prepstmt.close();
}
希望本文所述對(duì)大家Oracle數(shù)據(jù)庫(kù)程序設(shè)計(jì)有所幫助。
- 詳解Oracle游標(biāo)的簡(jiǎn)易用法
- Oracle游標(biāo)的使用實(shí)例詳解
- Oracle中游標(biāo)Cursor基本用法詳解
- 詳解Oracle隱式游標(biāo)和顯式游標(biāo)
- Oracle中的游標(biāo)和函數(shù)詳解
- Oracle顯示游標(biāo)的使用及游標(biāo)for循環(huán)
- Oracle存儲(chǔ)過(guò)程返回游標(biāo)實(shí)例詳解
- Oracle 游標(biāo)使用總結(jié)
- oracle 在一個(gè)存儲(chǔ)過(guò)程中調(diào)用另一個(gè)返回游標(biāo)的存儲(chǔ)過(guò)程
- Oracle游標(biāo)使用參考語(yǔ)句實(shí)例解析
相關(guān)文章
Oracle Database 10g數(shù)據(jù)庫(kù)安裝及配置教程
這篇文章主要介紹了Oracle Database 10g Release 2數(shù)據(jù)庫(kù)安裝及配置教程,感興趣的小伙伴們可以參考一下2016-08-08
Oracle 12C實(shí)現(xiàn)跨網(wǎng)絡(luò)傳輸數(shù)據(jù)庫(kù)詳解
這篇文章主要給大家介紹了關(guān)于Oracle 12C實(shí)現(xiàn)跨網(wǎng)絡(luò)傳輸數(shù)據(jù)庫(kù)的相關(guān)資料,文中介紹的非常詳細(xì),相信對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-06-06
在Oracle 8x實(shí)現(xiàn)自動(dòng)斷開(kāi)后再連接
在Oracle 8x實(shí)現(xiàn)自動(dòng)斷開(kāi)后再連接...2007-03-03
Navicat for oracle創(chuàng)建數(shù)據(jù)庫(kù)的方法
這篇文章主要介紹了Navicat for oracle創(chuàng)建數(shù)據(jù)庫(kù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11
Oracle數(shù)據(jù)庫(kù)如何將表的某一列所有值用逗號(hào)隔開(kāi)去重后合并成一行
在做系統(tǒng)時(shí)經(jīng)常會(huì)遇到在?個(gè)字段中,?逗號(hào)或其他符號(hào)分隔存儲(chǔ)多個(gè)信息,這篇文章主要給大家介紹了關(guān)于Oracle數(shù)據(jù)庫(kù)如何將表的某一列所有值用逗號(hào)隔開(kāi)去重后合并成一行的相關(guān)資料,需要的朋友可以參考下2023-12-12
Oracle客戶(hù)端連接報(bào)錯(cuò)ORA-12545問(wèn)題的解決辦法
這篇文章主要給大家介紹了關(guān)于Oracle客戶(hù)端連接報(bào)錯(cuò)ORA-12545問(wèn)題的解決辦法,ora12545因目標(biāo)主機(jī)或?qū)ο蟛淮嬖?連接失敗,文中通過(guò)圖文將解決的辦法介紹的非常詳細(xì),需要的朋友可以參考下2024-03-03

