免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 7040 | 回复: 10
打印 上一主题 下一主题

使用PreparedStatement出现 ORA-01000: 超出打开游标的最大数 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-11-23 17:56 |只看该作者 |倒序浏览
怎么回事?

论坛徽章:
0
2 [报告]
发表于 2005-11-23 18:17 |只看该作者
注意 statment 和 ResultSet 要关闭,特别是 statment

请检查你的代码,看看 PreparedStatement 或 ResultSet有没意外没有关闭的

请检查清楚,注意修改后,重启一下oracle或相关的服务,避免问题修正了,但调试问题造成的疑惑

论坛徽章:
0
3 [报告]
发表于 2005-11-23 19:16 |只看该作者
纪录集过大?

论坛徽章:
0
4 [报告]
发表于 2005-11-23 19:50 |只看该作者
需要重启oracle??其实我后来是用PreparedStatement.close();运行程序后还是报一样的错,所以有点疑惑,不知道在哪里关闭PreparedStatement才行,因为我是循环调用ps的,怕关了以后就不能用ps了

论坛徽章:
0
5 [报告]
发表于 2005-11-23 20:11 |只看该作者
我的代码是这样的,哪里漏了关闭???
  1. for(int p=0; p<rowct;p++)
  2.     {
  3.       try
  4.       {
  5.         PreparedStatement ps = conn.prepareStatement(sql);
  6.         for(int f=0; f<count; f++)
  7.         {
  8.           ps.setString(f+1,cvalue[p][f]);
  9.         }
  10.         ps.executeUpdate();
  11.         ps.close();
  12.         conn.commit();
  13.       }
  14.       catch(SQLException s)
  15.       {
  16.         System.out.println(sql);
  17.         System.out.println("error info:"+ s.getMessage());
  18.         continue;
  19.       }
  20.     }
复制代码

论坛徽章:
0
6 [报告]
发表于 2005-11-23 20:32 |只看该作者
每次都要不同的 SQL 吗?为啥把 SQL 放到里面?

LZ快试这代码有问题没,然后赶快报告情况


  1. PreparedStatement ps = conn.prepareStatement(sql);
  2. for(int p=0; p<rowct;p++)
  3. {
  4.       try
  5.       {
  6.         if (ps==null)
  7.         {
  8.                 ps = conn.prepareStatement(sql);
  9.         }

  10.         for(int f=0; f<count; f++)
  11.         {
  12.           ps.setString(f+1,cvalue[p][f]);
  13.         }

  14.         ps.executeUpdate();
  15.       }
  16.       catch(SQLException s)
  17.       {
  18.         System.out.println(sql);
  19.         System.out.println("error info:"+ s.getMessage());
  20.       }finally{
  21.         try{ps.close();}catch(Exception e){}
  22.         ps = null;
  23.       }
  24. }


复制代码



(此代码没经过调试,小问题请LZ自己调试)

论坛徽章:
0
7 [报告]
发表于 2005-11-23 20:45 |只看该作者
好了好了,终于好了
非常感谢wobushiwo 的大力协助!!
呵呵

论坛徽章:
0
8 [报告]
发表于 2005-11-23 20:47 |只看该作者
把sql放在for里面是因为每次参数放入到ps后,都要运行一次(在数据库中),别忘了我的第一个catch里面有一个continue,会有问题??

[ 本帖最后由 xiaokelz 于 2005-11-23 20:49 编辑 ]

论坛徽章:
0
9 [报告]
发表于 2005-11-23 20:51 |只看该作者
那样的写法也不是说多大错误,如果太大,ORACLE的各种参数又设置得太小会有发生这样的情况的

有时会提示没有合适的handle,其实是资源耗尽了

要注意,意外不能关闭,或生成太多的 statement

论坛徽章:
0
10 [报告]
发表于 2005-11-23 21:08 |只看该作者
finally是不是即使异常发生了,也会强制执行的一段代码,
就是当程序转移到continue那里??
如果不是,那我还要在continue上面加上ps.close()咯??
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP