日期:2014-05-20  浏览次数:20553 次

事务提交前CURSOR不会关闭?
下面是简化后的代码片段:

transaction   begin
        for(............){
       
        try{
        ps=conn.prepareStatement(....);
        rs   =   stmt.executeQuery();
rs.close();
stmt.close();
stmt   =   conn.prepareStatement(   sql.toString()   );
        stmt.executeUpdate();
                  }catch
                  ........
                  }finally   {
stmt.close
conn.close

}
        }
transaction   commit      

问题描述:  
        commit之前出现了   ORA-01000:   maximum   open   cursors   exceeded   异常,
        想问是否commit之前所有打开的cursors不会关闭?即使显示调用了close
       
        针对上面这样的程序逻辑有没有办法回避上述问题?

------解决方案--------------------
把transaction放入for循环,每次循环算作一个事务
------解决方案--------------------
试试batchUpdate
------解决方案--------------------
参考一下

http://www.blogjava.net/snoopy/archive/2005/01/27/744.html


尝试在for循环外创建Statement和PreparedStatement

------解决方案--------------------
conn.close 放到循环外 ?