您的位置:程序门 -> java -> j2ee / ejb / jms



ora-01000: maximum open cursors exceeded的问题


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


ora-01000: maximum open cursors exceeded的问题
发表于:2007-07-23 17:14:54 楼主
代码片断:  

preparedstatement   pstmt   =   null;
for(int   i=0;i <10;i++)   {
      pstmt   =   conn..preparestatement(strsql);
      pstmt.EXECuteupdate();
      pstmt.close();
}
我open_cursor设置为5,为什么会报ora-01000:   maximum   open   cursors   exceeded
我在每次循环都把pstmt给close了,为什么还会出游标溢出,是不是因为事物问题,也就是说如果一个循环在一个事物里,pstmt.close();是不是没有效果,cursor不管怎样都还是打开的。也就是必须一个循环提交一次。
发表于:2007-07-23 17:24:171楼 得分:0
只是关pstmt没用的,告诉你一个笨点的方法,再把conn.close()了,每次循环开头再加上获取连接conn的语句就可以了。这样是牺牲效率的,不过才10条就没问题。试试吧。
发表于:2007-07-23 17:31:092楼 得分:0
我的conn是线程绑定的,只放在框架层关
发表于:2007-07-23 17:33:183楼 得分:0
那干脆我open_cursor设置为10??
发表于:2007-07-23 17:34:024楼 得分:0
我在做这个测试,改oracle的open_cursor我知道有用,要的是在代码里怎么改
发表于:2007-07-23 17:41:035楼 得分:0
我是通过关conn解决的,我也想知道有什么更好的方法。。。
发表于:2007-07-23 17:43:196楼 得分:0
我的问题就是在创建多个pstmt时如何在conn不关时把pstmt给关掉
发表于:2007-07-23 17:44:307楼 得分:0
这样关pstmt好像没啥用~
发表于:2007-07-23 18:20:198楼 得分:0
open_cursor设置为5   也太小了点吧

oracle默认的是   300

还有   如果你的EXECuteupdate出错的话   即使close   stmt   conn   游标还是关不掉的   只是断开了程序和连接池的链接,连接池并没有释放游标,具体为什么我也不清楚,希望高人解答

另外像这种情况,尽量吧   conn..preparestatement写在程序外面     减少   create   statment


快速检索

最新资讯
热门点击