• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Oracle出现超出打开游标最大数的解决方法

    本文实例讲述了Oracle出现超出打开游标最大数的解决方法。分享给大家供大家参考,具体如下:

    Java代码在执行conn.createStatement()和conn.prepareStatement()的时候,实际上都是相当与在数据库中打开了一个cursor。尤其是,假如你的createStatement和prepareStatement是在一个循环里面的话,就会非常轻易出现这个问题。因为游标一直在不停的打开,而且没有关闭。

    一般来说,我们在写Java代码的时候,createStatement和prepareStatement都应该要放在循环外面,而且使用了这些Statment后,及时关闭。最好是在执行了一次executeQuery、executeUpdate等之后,假如不需要使用结果集(ResultSet)的数据,就马上将Statement或PreparedStatement关闭。

    对于出现ORA-01000错误这种情况,单纯的加大open_cursors并不是好办法,那只是治标不治本。实际上,代码中的隐患并没有解除。而且,绝大部分情况下,open_cursors只需要设置一个比较小的值,就足够使用了,除非有非常非凡的要求。

    假如你不使用连接池,那么就没有什么问题,一旦Connection关闭,数据库物理连接就被释放,所有相关Java资源也可以被GC回收了。

    但是假如你使用连接池,那么请注重,Connection关闭并不是物理关闭,只是归还连接池,所以PreparedStatement和ResultSet都被持有,并且实际占用相关的数据库的游标资源,在这种情况下,只要长期运行,往往就会报“游标超出数据库答应的最大值”的错误,导致程序无法正常访问数据库。

    正确的代码,如下所示:

    for(int i=0;ibalancelist.size();i++)
    {
      prepstmt = conn.prepareStatement(sql[i]);
      prepstmt.setBigDecimal(1,nb.getRealCost());
      prepstmt.setString(2, adclient_id);
      prepstmt.setString(3, daystr);
      prepstmt.setInt(4, ComStatic.portalId);
      prepstmt.executeUpdate();
      //循环到一定数量就要关闭,防止出现超出最大游标数量
      prepstmt.close();
    }
    
    

    希望本文所述对大家Oracle数据库程序设计有所帮助。

    您可能感兴趣的文章:
    • 详解Oracle游标的简易用法
    • Oracle游标的使用实例详解
    • Oracle中游标Cursor基本用法详解
    • 详解Oracle隐式游标和显式游标
    • Oracle中的游标和函数详解
    • Oracle显示游标的使用及游标for循环
    • Oracle存储过程返回游标实例详解
    • Oracle 游标使用总结
    • oracle 在一个存储过程中调用另一个返回游标的存储过程
    • Oracle游标使用参考语句实例解析
    上一篇:ORACLE数据库日常维护知识点总结
    下一篇:Oracle存储过程游标用法分析
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    Oracle出现超出打开游标最大数的解决方法 Oracle,出现,超出,打开,游标,