具体代码如下!请帮忙在代码上修改    private boolean update(Connection donn,ArrayList list)
    {
     String sql="";
     try
     {
     for(int kk=0;kk<list.size();kk++)
     {
     sql ="update dd_purchase set ebox_rmk=1 Where pur_no='"+list.get(kk)+"'";
     logger.info(sql);
     donn.createStatement().executeUpdate(sql);
}
     //donn.createStatement().executeUpdate(sql); 放这里不起作用!
     donn.commit();
     donn.close();
     return true;
     }
     catch(SQLException sqleee)
     {
     error.handle(sqleee, logger, p.smtpHost, p.from, p.programer,
      p.errorMailSubject, "更新資料數據時發生異常", "BIG5");
     return false; 
     }
     catch(Exception e)
     {
     error.handle(e, logger, p.smtpHost, p.from, p.programer,
      p.errorMailSubject, "更新數據時發生例外", "BIG5");
     return false;
     }
     finally
     {
     try
     {
     if(donn != null){donn.close();}
     }
     catch(Exception e)
     {
     logger.info("close donn error");
     }
     }
    }   

解决方案 »

  1.   

    超出了游标最大数了,可以拼sql,或批处理更新
      

  2.   

    超出了游标最大数了,拼sql不太好,批处理更新你考虑一下。
      

  3.   


    addBatch
    void addBatch(String sql)
                  throws SQLException将给定的 SQL 命令添加到此 Statement 对象的当前命令列表中。通过调用方法 executeBatch 可以批量执行此列表中的命令。 
    参数:
    sql - 通常此参数为 SQL INSERT 或 UPDATE 语句 
    抛出: 
    SQLException - 如果发生数据库访问错误,在已关闭的 Statement 上调用此方法,或者驱动程序不支持批量更新
    从以下版本开始: 
    1.2 
    另请参见:
    executeBatch(), DatabaseMetaData.supportsBatchUpdates()
      

  4.   

    楼主错在每一次循环就创建了一个java.sql.Statement,一个连接的Statement是有限的。
      

  5.   

    这样的错误很容易出现在Java代码中的主要原因是:Java代码在执行conn.createStatement()和conn.prepareStatement()的时候,实际上都是相当与在数据库中打开了一个cursor。尤其是,如果你的createStatement和prepareStatement是在一个循环里面的话,就会非常容易出现这个问题。因为游标一直在不停的打开,而且没有关闭。 一般来说,我们在写Java代码的时候,createStatement和prepareStatement都应该要放在循环外面,而且使用了这些Statment后,及时关闭。最好是在执行了一次executeQuery、executeUpdate等之后,如果不需要使用结果集(ResultSet)的数据,就马上将Statment关闭。 对于出现ORA-01000错误这种情况,单纯的加大open_cursors并不是好办法,那只是治标不治本。
    楼主可以在for循环里面去关闭createStatement、prepareStatement即可!