各位大虾:
我有一个java应用,需要执行
select user_id from tbl_user where state=0;
由于这个语句有5000左右条记录,我处理
while(rs.next())
{
//do things here
...
}
if(rs!=null)
rs.close();
rs=null;
程序在执行2、300条记录时报了
ORA-01000: 超出打开游标的最大数
这个错误。
请问:我该如何解决?
只能通过增大open_cursors来解决吗?
------解决方案--------------------
show parameter open_cursors;
看看相应的参数是多少,可以适当的改大点,不过出现这个错误一般都是应用程序里没有关闭游标的结果,重点检查你的应用程序
------解决方案--------------------
java里每次打开一个statement对象jdbc都会在数据库中打开一个游标来执行操作,做完业务后必须马上关闭,否则一旦多次打开且不关闭就会造成ORA-01000: 超出打开游标的最大数错误,如果需要循环建立statement对象最后统一提交,可以在循环里执行完活动马上关闭,关闭后业务处于未提交状态,直到执行connection.commit事件时活动才会提交.
oracle数据库中open_cursors默认值为300,正常情况都够用了,出现ORA-01000错误基本都是有程序没关闭游标,多出现于java程序使用连接池连接数据库的情况下,打开了statement没关闭就把连接放回了连接池或者循环打开statement对象而不关闭,请仔细检查自己的程序代码