public void updateAcState(ArrayList dataList){
PreparedStatement ps = null;
try{
int size = dataList.size();
ps = con.prepareStatement("update js_personinfo p set p.ac_state = '3' where p.cif_no = ? and p.ac_no = ? ");
for(int i = 0; i < size; i++){
System.out.println("iii::"+i);
String[] datas = (String[])dataList.get(i);
ps.setString(1, datas[14]);
ps.setString(2, datas[7]);
ps.addBatch();
}
[color=red]ps.executeBatch();[/color]
}catch (Exception e){
new CollectExceptionHandler().handle(con, e);
}finally{
DataSourceUtils.closeStatement(ps);
}
}
size 大小为30000,执行ps.executeBatch();没有反应,或者很慢
[b]问题补充:[/b]
radovi 你好,谢谢你的关注,我也有想过用两张表,把数据插入到一张表中,可是要把这些数据从原表中删除,也是很浪费时间的,不知还有没有好的办法
对于大数据的更新,肯定是要建立其他表来的快的。
如果你还没有怎么明白,可以看看专家们是怎么分析的
[url=http://oracle.banma.com/news/20080714/12856.shtml]http://oracle.banma.com/news/20080714/12856.shtml[/url]
数据库的东西,呵呵,比较麻烦的,提醒哦,测试的时候最好备份
批次更新的size改小一点,比如100,分批次提交。一个批次3w太大了
楼主的sql语句写法
中可不可以改进 能不嫩有几条字段不用比较两个的p.cif_no = ? and p.ac_no = ?
还有 楼主的数据3w蛮大的 呵呵 分流一下吧
另外
建议楼主可以虚拟一张表 这样效率会高很多的
下面是我用过的一个虚拟语句
update (select T1.Subobject_Name a1,T2.Subobject_Name b1 from T1,T2 where T1.ID=T2.ID)
set a1=b1;
--由于UPDATE是比较消耗资源的操作,会有redo和undo操作,创建一张新表,因为采用insert比update快的多,之后你会有一张旧表和一张新表,然后要怎么做就具体情况具体分析了~~~~~
create table T3 as select * from T1 where rownum<1;
alter table T3 nologging;
insert /*+ APPEND / into T3
select T1. from T1,T2 where T1.ID=T2.ID;
原表的数据不用删啊,转移后直接将原表删了就可以了。
还有啊,楼主的数据量确实要分批上啊,3W无论如何是不行的呀