免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
BlogJava - 天道酬勤 - 關(guān)于ORACLE游標(biāo)的問題(ORA-01000: maximum open cursors exceeded)

關(guān)于ORACLE游標(biāo)的問題(ORA-01000: maximum open cursors exceeded)

昨天在開發(fā)過程中,經(jīng)常碰到ORA-01000: maximum open cursors exceeded這個錯誤。一看報(bào)錯,知道是游標(biāo)超過最大數(shù)了,以前在做DB2開發(fā)的時候,也曾遇到過類似的問題。雖然解決了,但一直沒弄清楚,JDBC是如何和數(shù)據(jù)庫發(fā)生交互的?又是在什么時候打開數(shù)據(jù)庫游標(biāo)的?腦袋就跟漿糊一樣,說來真是慚愧啊

昨天google了一把,終于解開一點(diǎn)迷惑了。

下面的片斷轉(zhuǎn)載于www.itpub.net

[TIP]關(guān)于Java開發(fā)中使用Oracle數(shù)據(jù)庫的一點(diǎn)注意事項(xiàng)(原創(chuàng))

很多朋友在Java開發(fā)中,使用Oracle數(shù)據(jù)庫的時候,經(jīng)常會碰到有ORA-01000: maximum open cursors exceeded.的錯誤。

實(shí)際上,這個錯誤的原因,主要還是代碼問題引起的。
ora-01000: maximum open cursors exceeded.
表示已經(jīng)達(dá)到一個進(jìn)程打開的最大游標(biāo)數(shù)。

這樣的錯誤很容易出現(xiàn)在Java代碼中的主要原因是:Java代碼在執(zhí)行conn.createStatement()和conn.prepareStatement()的時候,實(shí)際上都是相當(dāng)與在數(shù)據(jù)庫中打開了一個cursor。尤其是,如果你的createStatement和prepareStatement是在一個循環(huán)里面的話,就會非常容易出現(xiàn)這個問題。因?yàn)橛螛?biāo)一直在不停的打開,而且沒有關(guān)閉。

一般來說,我們在寫Java代碼的時候,createStatement和prepareStatement都應(yīng)該要放在循環(huán)外面,而且使用了這些Statment后,及時關(guān)閉。最好是在執(zhí)行了一次executeQuery、executeUpdate等之后,如果不需要使用結(jié)果集(ResultSet)的數(shù)據(jù),就馬上將Statment關(guān)閉。

對于出現(xiàn)ORA-01000錯誤這種情況,單純的加大open_cursors并不是好辦法,那只是治標(biāo)不治本。實(shí)際上,代碼中的隱患并沒有解除。
而且,絕大部分情況下,open_cursors只需要設(shè)置一個比較小的值,就足夠使用了,除非有非常特別的要求。

我昨天犯的錯誤就是把創(chuàng)建statement放到了循環(huán)之內(nèi),結(jié)果導(dǎo)致cursor猛增,到達(dá)了數(shù)據(jù)庫設(shè)置的最大數(shù)。
雖然解決了問題,也清楚了游標(biāo)是何時創(chuàng)建的,但還有幾個問題比較迷糊。
1、通過查詢,JDBC是將所有的查詢結(jié)果一次性放到ResultSet中,還是一次只放一定數(shù)目的記錄?例如,查詢結(jié)果為2000條數(shù)據(jù),JDBC是一次性將2000條數(shù)據(jù)放到結(jié)果集中,還是分批放置呢?

2、當(dāng)通過ResultSet.next(),移動結(jié)果集指針時,此時是否還與數(shù)據(jù)庫發(fā)生交互?

posted on 2005-01-27 10:15 候鳥南飛 閱讀(4092) 評論(9)  編輯 收藏 收藏至365Key

評論

# re: 關(guān)于ORACLE游標(biāo)的問題(ORA-01000: maximum open cursors exceeded)  回復(fù)   

連接和statement使用完畢之后應(yīng)該及時關(guān)閉,這個應(yīng)該是粉簡單的道理吧.
2005-01-27 10:53 | eamoi

# re: 關(guān)于ORACLE游標(biāo)的問題(ORA-01000: maximum open cursors exceeded)  回復(fù)   

鳥人
還沒回到阿?
2005-02-17 21:33 | 不至于

# re: 關(guān)于ORACLE游標(biāo)的問題(ORA-01000: maximum open cursors exceeded)  回復(fù)   


2005-03-29 15:05 |

# re: 關(guān)于ORACLE游標(biāo)的問題(ORA-01000: maximum open cursors exceeded)  回復(fù)   

The article is great. I got the same error and keep scratching my head till I found your page. Keep it up!
2005-04-28 15:39 | San

# re: 關(guān)于ORACLE游標(biāo)的問題(ORA-01000: maximum open cursors exceeded)  回復(fù)   

繼續(xù)下去啊。這個問題應(yīng)該是一個比較典型的問題了吧,繼續(xù)討論阿
2005-05-10 18:27 | 芨芨草

# re: 關(guān)于ORACLE游標(biāo)的問題(ORA-01000: maximum open cursors exceeded)  回復(fù)   

pst.close();
rs.close();

只要及時關(guān)閉應(yīng)該就可以了吧?
2005-07-05 15:23 | plutohades

# re: 關(guān)于ORACLE游標(biāo)的問題(ORA-01000: maximum open cursors exceeded)  回復(fù)   

首先結(jié)果集resultset在你的java程序處。其中有個fetchsize設(shè)置,這個表示每次從數(shù)據(jù)庫處取多少條記錄到resultset.
2006-03-14 09:42 |

# re: 關(guān)于ORACLE游標(biāo)的問題(ORA-01000: maximum open cursors exceeded)  回復(fù)   

當(dāng)通過ResultSet.next(),移動結(jié)果集指針時,此時是否還與數(shù)據(jù)庫發(fā)生交互?

不發(fā)生交互,數(shù)據(jù)庫執(zhí)行完查詢后,已經(jīng)把查詢結(jié)果交給ResultSet了,以后的操作,和數(shù)據(jù)庫無關(guān)。
2006-03-15 10:26 | jing

# re: 關(guān)于ORACLE游標(biāo)的問題(ORA-01000: maximum open cursors exceeded)  回復(fù)   

交互,如果1個查詢有10000條記錄,resultset中只有fetchsize條,當(dāng)next時還會在一定時機(jī)去交互
2006-03-17 10:44 |
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
關(guān)ORACLE Cursor的問題ORA-01000: maximum open cursors exceeded
oracle ORA-01000:maximum open cursors exceeded
出錯"ORA-01000: maximum open cursors exceeded"怎么解決
Oracle基本參數(shù)(OPEN_CURSORS)
深入淺出Oracle學(xué)習(xí)筆記(2)
系統(tǒng)投產(chǎn)前,Oracle數(shù)據(jù)庫優(yōu)化思路和9個典型問題
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服