Oracle的解决方案超出了打开游标的最大数量。

Oracle的解决方案超出了打开游标的最大数量。
本文演示了超出开放游标的Oracle最大数量的解决方案:

当java代码执行conn.createstatement()和()conn.preparestatement,它实际上是相当于在数据库中打开一个游标。特别是,如果你的createstatement和preparestatement是一个循环,它将很容易出现。因为光标不断开放,而不是封闭的。

一般来说,当我们写java代码,createstatement和preparestatement应放在外循环,当这些语句的使用,我们将关闭的时间。这是更好地执行executeQuery,executeUpdate等等。如果我们不需要使用结果集的数据(结果),我们将关闭语句或PreparedStatement立即。

为ora-01000误差的情况下,它是不增加open_cursors简单的好方法。这是唯一的治疗。事实上,代码中的隐患仍未解除。此外,在大多数情况下,open_cursors只需要设置一个比较小的值,这是足以除非有非常特殊的要求使用。

如果不使用连接池,则没有问题。一旦连接被关闭,数据库的物理连接被释放,以及所有相关的java资源也可以被回收,用气相色谱法。

但如果你使用连接池,所以请注意连接,关闭不关闭,刚刚返回到连接池,所以预处理语句和结果集的相继举办,和光标资源相关数据库的实际占领,在这种情况下,只要长期运行,往往会报告光标超过最大误差数据库,使程序访问数据库的正常。

正确的代码,如下所示:
为(int i = 0;i < balancelist.size();i++)
{
prepstmt = conn.preparestatement(SQL {我});
prepstmt.setbigdecimal(1,nb.getrealcost());
prepstmt.setstring(2,adclient_id);
prepstmt.setstring(3,daystr);
prepstmt.setint(4,comstatic。portalid);
prepstmt.executeupdate();
循环到某个数字将被关闭,以防止出现超过最大数量的游标。
Prepstmt.close();
}

希望本文能帮助您设计oracle数据库程序。

tag:游标数量解决方案超出了电脑软件

相关内容