Oracle执行数据库操作时报ORA-01000 错误:超出最多允许打开的游标数

异常场景:

在使用JDBC获取数据库连接时,没有按照代码规范及时关闭数据库连接,而是在获取到连接后,进行大量数据库操作(例如,循环查询、修改、新增等)。

代码示例


public void update(String[] queries){
    Connection conn = null; 
    Statement stmt = null; 
    try { 
        conn = getConnection();
        for(int i = 0; i < queries.length; i++) { 
            stmt = conn.createStatement(); 
            int count = stmt.executeUpdate(queries[i]); 
            // do work 
        } 
    } catch (Exception e) { 
        // handle any exceptions
    } finally { 
        try { 
            if(stmt != null) 
                stmt.close(); 
        } catch (SQLException sse) {}
        try { 
            if(conn != null) 
                conn.close(); 
        } catch (SQLException cse) {}
    }
}

解决方案:

避免采用任何放弃 JDBC 对象的代码惯例,尽量做到Connection、Statement 和 ResultSet操作数据库时,尽量保证数据库操作次数在已知可控范围,若次数不可控,则需要及时关闭。

代码示例

public void update(String[] queries){
    Connection conn = null; 
    Statement stmt = null; 
    for(int i = 0; i < queries.length; i++) { 
        try { 
            conn = getConnection();
            stmt = conn.createStatement(); 
            int count = stmt.executeUpdate(queries[i]); 
            // do work 
        } catch (Exception e) { 
            // handle any exceptions
        } finally { 
            try { 
                if(stmt != null) 
                    stmt.close(); 
            } catch (SQLException sse) {}
            try { 
                if(conn != null) 
                    conn.close(); 
            } catch (SQLException cse) {}
        }
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值