天道酬勤

          沒有成功,說明努力還不夠!
          隨筆 - 2, 文章 - 0, 評論 - 29, 引用 - 0
          數(shù)據(jù)加載中……

          2005年1月27日

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

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

          昨天google了一把,終于解開一點迷惑了。

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

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

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

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

          這樣的錯誤很容易出現(xiàn)在Java代碼中的主要原因是:Java代碼在執(zhí)行conn.createStatement()和conn.prepareStatement()的時候,實際上都是相當(dāng)與在數(shù)據(jù)庫中打開了一個cursor。尤其是,如果你的createStatement和prepareStatement是在一個循環(huán)里面的話,就會非常容易出現(xià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)不治本。實際上,代碼中的隱患并沒有解除。
          而且,絕大部分情況下,open_cursors只需要設(shè)置一個比較小的值,就足夠使用了,除非有非常特別的要求。

          我昨天犯的錯誤就是把創(chuàng)建statement放到了循環(huán)之內(nèi),結(jié)果導(dǎo)致cursor猛增,到達了數(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 @ 2005-01-27 10:15 候鳥南飛 閱讀(52605) | 評論 (27)編輯 收藏

          2005年1月13日

          終于有了java的blog了

          在cnblogs也呆了快大半年了,但由于平時事情比較多,在公司也很少有心情去寫東西,所以也閑置了很久。

          前天收到dudu的邀請,搶注了一個java的blog。以后會經(jīng)常來,也寫下自己的成長歷程,不僅是為了日省三身,不斷提高自己,同時也是為了在以后,能給自己留下一點東西。無論是好是壞,都是自己的。

           

          posted @ 2005-01-13 11:18 候鳥南飛 閱讀(992) | 評論 (2)編輯 收藏

          主站蜘蛛池模板: 肥城市| 马龙县| 句容市| 叙永县| 垦利县| 富宁县| 珲春市| 理塘县| 饶阳县| 绥化市| 延安市| 中西区| 昌乐县| 蕉岭县| 桐梓县| 曲水县| 宁南县| 石屏县| 竹山县| 宁德市| 巴林左旗| 灌云县| 盐山县| 长顺县| 卢氏县| 阿拉善右旗| 册亨县| 安远县| 井陉县| 齐河县| 淮北市| 冕宁县| 奉贤区| 天柱县| 东乌| 灯塔市| 枝江市| 修文县| 龙胜| 清河县| 冀州市|