该问题大多出现在使用JDBC开发中。解决办法如下
第一:及时关闭数据库连接,关闭PreparedStatement
在使用完数据库后及时关闭连接;connction.close(),处理完数据之后及时关闭preparedStatement
如果开发的方法中需要多处进行数据逻辑处理,需要多次针对数据库操作,建议把Connection和PreparedStatemen定义变量,在不同的方法内不要多次重新创建对象,而是使用传递的变量进行操作。在每次数据操作后,及时关闭preparedStatement。
第二:在代码优化后还没达到目的,建议从数据库设置入手,修改数据库配置。
这里针对Oracle数据库进行说明,首先通过语句
select name,value from v$parameter where name='open_cursors';可以查询当前游标数。
然后可以通过语句
alter system set open_cursors=6000 scope=both;修改游标数。6000是值,可自行定义
最后重新运行程序,检查问题是否解决。在运行过程中,可以通过语句
select count(*) from v$open_cursor;查询当前已使用游标数。