一、异常描述
通过JDBC打开数据库连接,通过连接的PreparedStatement提交SQL更新脚本,在大批量提交数据未正常关闭PreparedStatement时会报出“java.sql.SQLException:ORA-01000:超出打开游标最大数”异常,详情如下图所示
二、解决步骤
1. 在提交完成后通过try代码段,并加入finally代码中对PreparedStatement对象进行及时关闭,如下所示
try {@b@ pst = conn.prepareStatement(sql);@b@ if (params != null)@b@ for (int i = 0; i < params.length; ++i)@b@ pst.setObject(i + 1, params[i]);@b@@b@@b@ rows = pst.executeUpdate();@b@ } finally {@b@ pst.close(); @b@ }
2. 对于 conn.prepareStatement的conn对象控制好连接数数量(可以通过连接池或公共的单独唯一静态Connection成员变量限制),如下所示
private static Connection conn = null;@b@ @b@ static{@b@ conn = DBUtil.getConnection();@b@ }