oracle 超出最大的游标数?怎么解决?

sqlFather 2010-05-07 10:04:05

public void insertTraitStrTrees(List<TraitStrTrees> list, String tableName) {

connect();
sql = "insert into " + tableName + " values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
try {
conn.setAutoCommit(false);
for (int i = 0; i < list.size(); i++) {
System.out.println(tableName+" "+i);
ps = conn.prepareStatement(sql);
ps.setInt(1, list.get(i).getDg_id());
ps.setInt(2, list.get(i).getId());
ps.setString(3, list.get(i).getTrait_value());
ps.setInt(4, list.get(i).getParent_id());
ps.setInt(5, list.get(i).getChild_id());
ps.setInt(6, list.get(i).getLeft_id());
ps.setInt(7, list.get(i).getRight_id());

ps.setBlob(8, BLOB.getEmptyBLOB());
ps.setBlob(9, BLOB.getEmptyBLOB());
ps.setBlob(10, BLOB.getEmptyBLOB());
ps.setBlob(11, BLOB.getEmptyBLOB());
ps.setBlob(12, BLOB.getEmptyBLOB());
ps.setBlob(13, BLOB.getEmptyBLOB());
ps.setBlob(14, BLOB.getEmptyBLOB());

ps.setInt(15,list.get(i).isFrist());
ps.setInt(16,list.get(i).isHasChild());
ps.executeUpdate();
String sql1="select articles,pictures,tables,videos,audios,ads,pages from "+tableName+" where dg_id="+list.get(i).getDg_id()+" and id="+list.get(i).getId()+" FOR UPDATE";
System.out.println(sql1);
ps=conn.prepareStatement(sql1);

ResultSet rs=ps.executeQuery();
rs.next();
BLOB articles=(BLOB)rs.getBlob(1);
BLOB pictures=(BLOB)rs.getBlob(2);
BLOB tables=(BLOB)rs.getBlob(3);
BLOB videos=(BLOB)rs.getBlob(4);
BLOB audios=(BLOB)rs.getBlob(5);
BLOB ads=(BLOB)rs.getBlob(6);
BLOB pages=(BLOB)rs.getBlob(7);

OutputStream out1=articles.getBinaryOutputStream();
OutputStream out2=pictures.getBinaryOutputStream();
OutputStream out3=tables.getBinaryOutputStream();
OutputStream out4=videos.getBinaryOutputStream();
OutputStream out5=audios.getBinaryOutputStream();
OutputStream out6=ads.getBinaryOutputStream();
OutputStream out7=pages.getBinaryOutputStream();
try {
out1.write(list.get(i).getArticles());
out1.close();
out2.write(list.get(i).getPictures());
out2.close();
out3.write(list.get(i).getTables());
out3.close();
out4.write(list.get(i).getVideos());
out4.close();
out5.write(list.get(i).getAudios());
out5.close();
out6.write(list.get(i).getAds());
out6.close();
out7.write(list.get(i).getPages());
out7.close();
} catch (IOException ex) {
Logger.getLogger(MysqlDB.class.getName()).log(Level.SEVERE, null, ex);
}

String sql2="update "+tableName+" set articles=? , pictures=? , tables=? , videos=? , audios=? , ads=? , pages=? where dg_id="+list.get(i).getDg_id()+" and id="+list.get(i).getId();
System.out.println(sql2);
ps=conn.prepareStatement(sql2);
ps.setBlob(1, articles);
ps.setBlob(2, pictures);
ps.setBlob(3, tables);
ps.setBlob(4, videos);
ps.setBlob(5, audios);
ps.setBlob(6, ads);
ps.setBlob(7, pages);

ps.executeUpdate();
ps.addBatch();
}
ps.executeBatch();
conn.commit();
} catch (SQLException e) {
e.printStackTrace();
} finally {
close();
}

}

...全文
789 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangwonderful 2010-05-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 iihero 的回复:]

1. 修改open_cursors
SQL>conn sys as sysdba
SQL>alter system set open_cursors=1500 scope=both;
2. 或者:
List<TraitStrTrees> list它的元素个数太多,你不用枚举完它再commit,而是每隔比如50条commit一次。
[/Quote]
支持此方法
tangren 2010-05-07
  • 打赏
  • 举报
回复
使用BLOB导致游标打开没有关闭?
看一下数据库的游标数参数是多少
show parameter open_cursors
iihero_ 2010-05-07
  • 打赏
  • 举报
回复
1. 修改open_cursors
SQL>conn sys as sysdba
SQL>alter system set open_cursors=1500 scope=both;
2. 或者:
List<TraitStrTrees> list它的元素个数太多,你不用枚举完它再commit,而是每隔比如50条commit一次。
ojuju10 2010-05-07
  • 打赏
  • 举报
回复
修改Open_cursors参数值

alter system set open_cursors=1500 scope=both;
碧水幽幽泉 2010-05-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 iihero 的回复:]
1. 修改open_cursors
SQL>conn sys as sysdba
SQL>alter system set open_cursors=1500 scope=both;
2. 或者:
List<TraitStrTrees> list它的元素个数太多,你不用枚举完它再commit,而是每隔比如50条commit一次。
[/Quote]
up!
一直以来把据库的表转换成Entity或DTO都是一件让人头痛的事情,既浪费时间又很繁琐,看着几十上百个表的几百上千个字段,真是一件让人很头痛的事情。 我们也想过很多办法解决这个问题,包括用MyEclipse连接据库生成JavaBean,但多多少少还是会有一些不尽人意的地方,包括表和表字段的comment总是无法生成,而且还会生成很多无用的注释代码,让代码看起来一点都不干净,配置非常繁琐等等问题。 于是一怒之下,自己动手丰衣足食,就自己用Swing写了一个通过据库的表生成JavaBean的工具,支持MySQL、Oracle、SQLServce,完美支持JPA注解,可以同时生成Entity和DTO,可以自动去除表前缀,并支持去除多个前缀,支持精确指定只生成哪几个表的Bean,也支持模糊查找生成哪几个表的Bean,现在不但成员变量上能生成备注了,而且在Getter和Setter上也能有备注了! 更重要的是所有的配置都能被保存到本地,只要配置过一次,下次使用只要点一下生成JavaBean,下一秒就能拿到你想要的JavaBean了,完全实现秒生成。 这次版本更新如下: 1、新增查看据库中所有表的对话框,在精确匹配文本框旁点击更多按钮或双击精确匹配文本框, 即可弹出选择据库表的对话框,这里将列出据库中所有的表,并支持模糊查询(不区分大小写) 查找需要的表,在复选框中选中需要的表,点确认选择即可。 2、解决Oracle一次转换的表过多时出现超出打开游标最大异常,现在测试了一次生成四百多张表 的DTO和Entity成功完成转换,只是表太多速度有点慢。 3、内存占用优化,对占用的内存资源进行清理,极大的减少了程序对系统内存的占用,提高了程序的 运行效率和稳定性。

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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