寻求FOR循环中 ORA-01000: 超出打开游标的最大数 的解决方法

ws010 2011-08-08 10:53:34
因为第三方数据的格式问题 ,不得不用如下方式处理,我这边是webservice的程序,为了避免浪费资源,在服务启动的时候就加载所需的数据库连接。
for(){
dbcon = ((Connection) dbmap.get("con"));
dbcon.createStatement().execute()
inSql = 插入语句
ps = dbcon.prepareStatement(inSql);
......
ps.close;
}
connection是存到map里的,由于特殊性不得不用循环来处理,但我发现 dbcon.createStatement().execute()这个连接是没法关的,如果关了就把服务初始化的连接也给关了,但是不关闭的话就会超出打开游标的最大数,各位有其他好的解决方式吗?不要说把con.creaeteStatement放在循环外面哦。
...全文
288 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
yhy1987 2011-08-09
  • 打赏
  • 举报
回复
dbcon.createStatement().execute() 这里创建Statement的时候就相当于打开一个游标了,创建的时候给个引用,到循环的最后关闭一下!
你的PreparedStatement是关闭了,但dbcon.createStatement().execute()这句中创建的就没有被关闭
qybao 2011-08-09
  • 打赏
  • 举报
回复
允许部分commit吗?还是必须整体commit?
如果可以部分commit,试试commit一下看看。
wula0010 2011-08-09
  • 打赏
  • 举报
回复
不知道你有多少个数据库?不会超过10个吧,为什么不放到连接池里?这样关闭打开连接,都不会耗费资源,你执行dbcon.createStatement().execute()这个,而不关闭连接,肯定是浪费资源,而不是节约资源。换个思路解决问题。
ChDw 2011-08-09
  • 打赏
  • 举报
回复
dbcon.createStatement().execute()

这个Statement就没有关闭,所以才会报错。你要保证所有的Statement、ResultSet都正常关闭
liuyuhua0066 2011-08-09
  • 打赏
  • 举报
回复
像ps = dbcon.prepareStatement(inSql) 一样,new一个Statement对象,然后关闭会出问题?

[Quote=引用 5 楼 ws010 的回复:]
引用 4 楼 liuyuhua0066 的回复:

dbcon.createStatement().execute()
这句想做什么?

做删除语句
[/Quote]
gukuitian 2011-08-09
  • 打赏
  • 举报
回复
貌似你的connect只有一个啊,
softroad 2011-08-09
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 ticmy 的回复:]

for里面加一个判断,比如i%100 == 0 的时候就关闭连接,下一次取新连接
[/Quote]

如果超过最大连接数,就从新取一个connection
龙四 2011-08-09
  • 打赏
  • 举报
回复
for里面加一个判断,比如i%100 == 0 的时候就关闭连接,下一次取新连接
ws010 2011-08-09
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 viszl 的回复:]

alter system set open_cursors=1000
[/Quote]
这样指标不治本吧 ,如果数据量太大仍然会有问题的。
ws010 2011-08-09
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 liuyuhua0066 的回复:]

dbcon.createStatement().execute()
这句想做什么?
[/Quote]
做删除语句
liuyuhua0066 2011-08-09
  • 打赏
  • 举报
回复
dbcon.createStatement().execute()
这句想做什么?
loveofmylife 2011-08-09
  • 打赏
  • 举报
回复
alter system set open_cursors=1000
ws010 2011-08-08
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 lmaohuanl 的回复:]

不要说把con.creaeteStatement放在循环外面哦。

难道不行??
[/Quote]
嗯 因为数据来的时候是不同的数据库,我要先在body里解析出哪个数据库的,接下来才能按条件做删除。
LMAOhuaNL 2011-08-08
  • 打赏
  • 举报
回复
不要说把con.creaeteStatement放在循环外面哦。

难道不行??

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧