向Oracle数据库表中插入十几万条数据,可是当插入3万多条后,程序就抛
ORA-01000 maximum open cursors exceeded
异常信息。Google了异常信息,得知这样的错误很容易出现在Java代码中的主要原因是:
Java代码在执行conn.createStatement()和conn.prepareStatement()的时候,实际上都是相当于在数据库中打开了一个cursor。尤其是,如果你的createStatement和prepareStatement是在一个循环里面的话,就会非常容易出现这个问题。因为游标一直在不停的打开,而且没有关闭。
一般来说,我们在写Java代码的时候,createStatement和prepareStatement都应该要放在循环外面,而且使用了这些Statment后,及时关闭。最好是在执行了一次executeQuery、executeUpdate等之后,如果不需要使用结果集(ResultSet)的数据,就马上将Statment关闭(statementName.close())。
下面将代码附上
抛异常代码:
Connection conn = DBUtils.getConnection();//获取数据库连接
PreparedStatement pstmt = conn.prepareStatement("select statement...");
ResultSet rset = pstmt.executeQuery();
while (rset.next()) {
PreparedStatement pst=conn.prepareStatement("insert statement...");//开启一个游标
//pst.setXXX()...;
pst.executeUpdate();
pst=conn.prepareStatement("another insert statement");//再开启一个游标
//pst.setXXX()...;
pst.executeUpdate();
pst=conn.prepareStatement("third insert statement");//开启一个游标
//pst.setXXX()...;
pst.executeUpdate();
pst.close();
}
rset.close();
pstmt.close();
conn.close();
更正后的可行代码:
Connection conn = DBUtils.getConnection();//获取数据库连接
PreparedStatement pstmt = conn.prepareStatement("select statement...");
ResultSet rset = pstmt.executeQuery();
while (rset.next()) {
PreparedStatement pst=conn.prepareStatement("insert statement...");
//pst.setXXX()...;
pst.executeUpdate();
pst.close();//及时关闭Statement
pst=conn.prepareStatement("another insert statement");
//pst.setXXX()...;
pst.executeUpdate();
pst.close();
pst=conn.prepareStatement("third insert statement");
//pst.setXXX()...;
pst.executeUpdate();
pst.close();
pst = null;
}
rset.close();
pstmt.close();
conn.close();
分享到:
相关推荐
解决疑难问题,针对偏僻的问题:oracle超出打开游标的最大数的原因和解决方案,希望能对大家操作数据库有用处
本文对ORA-01000_maximum_open_cursors_exceeded_超出打开游标的最大数的原因和解决方案有详细描述
Oracle中PLSQL游标简介
本文实例讲述了Oracle出现超出打开游标最大数的解决方法。分享给大家供大家参考,具体如下: Java代码在执行conn.createStatement()和conn.prepareStatement()的时候,实际上都是相当与在数据库中打开了一个cursor。...
ORACLE中的游标汇总,记录了oracle中游标的使用
ORACLE中的游标.ppt
oracle数据库的游标详述,以及各游标相关信息的具体代码示例。可以帮助初学者以及数据库管理员更好的理解和学习游标的使用和操作。
Oracle存储过程游标详解,针对Oracle存储过程游标详细说明。
oracle游标的总结oracle游标的总结oracle游标的总结oracle游标的总结oracle游标的总结oracle游标的总结oracle游标的总结oracle游标的总结oracle游标的总结
oracle的存储过程与游标的使用。不错的资源。oracle为10g
Oracle存储过程、游标、函数的详解
当查询返回结果超过一行时,就需要一个显式游标,此时用户不能使用select into语句。本文介绍了Oracle数据库游标的使用方法。
Oracle数据库的游标学习总结Oracle数据库的游标学习总结
这些例子是我自己也是在学习的时候写的。。希望与同水平的人有用。
Oracle数据库游标使用示例 Oracle数据库游标使用示例 Oracle数据库游标使用示例
讲有关java如何调用ORACLE存储过程以及游标使用,它只包含JAVA调用ORACLE存储过程游标使用(上),还有JAVA调用ORACLE存储过程游标使用(上),
oracle视频教程(游标、子程序、包) oracle视频教程(游标、子程序、包)
Oracle中的游标和函数详解 1.游标 游标是一种 PL/SQL 控制结构;可以对 SQL 语句的处理进行显示控制,便于对表的行数据 逐条进行处理。 游标并不是一个数据库对象,只是存留在内存中。 操作步骤: 声明游标 ...
Oracle 游标! 值得下载看看!资源免费,大家分享!!