java中更新资料事,发生ORA-01000: maximum open cursors exceeded错误!

快跑蜗牛哥 2011-03-08 05:09:58
具体代码如下!请帮忙在代码上修改

    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");
}
}
}
...全文
73 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Gray_Sky 2011-03-08
  • 打赏
  • 举报
回复
这样的错误很容易出现在Java代码中的主要原因是:Java代码在执行conn.createStatement()和conn.prepareStatement()的时候,实际上都是相当与在数据库中打开了一个cursor。尤其是,如果你的createStatement和prepareStatement是在一个循环里面的话,就会非常容易出现这个问题。因为游标一直在不停的打开,而且没有关闭。

一般来说,我们在写Java代码的时候,createStatement和prepareStatement都应该要放在循环外面,而且使用了这些Statment后,及时关闭。最好是在执行了一次executeQuery、executeUpdate等之后,如果不需要使用结果集(ResultSet)的数据,就马上将Statment关闭。

对于出现ORA-01000错误这种情况,单纯的加大open_cursors并不是好办法,那只是治标不治本。


楼主可以在for循环里面去关闭createStatement、prepareStatement即可!
铁匠梁 2011-03-08
  • 打赏
  • 举报
回复
楼主错在每一次循环就创建了一个java.sql.Statement,一个连接的Statement是有限的。
铁匠梁 2011-03-08
  • 打赏
  • 举报
回复

addBatch
void addBatch(String sql)
throws SQLException将给定的 SQL 命令添加到此 Statement 对象的当前命令列表中。通过调用方法 executeBatch 可以批量执行此列表中的命令。


参数:
sql - 通常此参数为 SQL INSERT 或 UPDATE 语句
抛出:
SQLException - 如果发生数据库访问错误,在已关闭的 Statement 上调用此方法,或者驱动程序不支持批量更新
从以下版本开始:
1.2
另请参见:
executeBatch(), DatabaseMetaData.supportsBatchUpdates()
快跑蜗牛哥 2011-03-08
  • 打赏
  • 举报
回复
如何进行 批处理更新 啊!
有没有这方面的例子啊!!
zk77zyy 2011-03-08
  • 打赏
  • 举报
回复
超出了游标最大数了,拼sql不太好,批处理更新你考虑一下。
学习Java中 2011-03-08
  • 打赏
  • 举报
回复
超出了游标最大数了,可以拼sql,或批处理更新

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧