java - 超出最大游标数 SQLException-- 配置问题或游标泄漏?

标签 java sql oracle database-connection sqlexception

我正在通过 Java 调用 SQL 过程。我在执行代码时在日志中收到 SQL 异常 - java.sql.SQLException:ORA-01000:超出最大打开游标数

我遇到过类似的问题并尝试过这个-

  1. open_cursors 从 30000 增加到 40000。
  2. 关闭了try和finally block 中的语句。

但是并没有解决问题。我的代码有问题吗?

这是我的 Java 代码-

public static void buildingHelpContent(String p_id) throws Throwable{
        Connection conn = ExtractHP.getConnection();
        CallableStatement cs = null;
        log.debug("arguments for COMP.Help.build_hp_data  p_id=  "+p_id);
        try {
            cs = conn.prepareCall("{call COMP.Help.build_hp_data(?)}");
            cs.setString(1, p_id);
            cs.execute();
            if(cs!=null)            
                cs.close();

        } catch (SQLException e) {
            log = ExtractHP.getLogger();
            log.debug("!!! Java Exception !!!\n");
            log.error("Exception while executing the procedure for ID ...."+ p_id, e);          
        }
        finally{
            if(cs!=null)
                cs.close();
        }
    }

最佳答案

您没有关闭连接,可以使用try-with-resources block (不带finally):

    log.debug("arguments for COMP.Help.build_hp_data  p_id=  "+p_id);
    try (Connection conn = ExtractHP.getConnection();
        CallableStatement cs = conn.prepareCall("{call COMP.Help.build_hp_data(?)}")){

在 java 6 中,也在 finally 中关闭连接:

finally{
        if(cs!=null)
            cs.close();
        if(conn!=null)
            conn.close();
    }

关于java - 超出最大游标数 SQLException-- 配置问题或游标泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56540192/

相关文章:

string - Oracle函数返回字符串之间的相似度

database - 如何更改oracle 12c中的SYS和SYSTEM密码?

java - android中sqlite无法创建表

java - Spring 集成测试中 ContextRefreshedEvent 过早触发

java - 当线程池中没有空闲线程并且我们向池中提交任务时会发生什么?

c# - 无法翻译 LINQ 表达式。要么以可翻译的形式重写查询,要么显式切换到客户端评估

sql - 当只有某些行是有效的正则表达式时,Postgres : select using column as regex,

java - 递归:确定数组 A 中是否有两个元素总和为 k

sql - 在 SqlCommand 中转换数据库列格式

java - 如何在 Java 代码中动态获取 Oracle 数据库中同义词的函数或过程参数