oracle语句批处理

数据量有40万条,从一个对象table_01一条一条取数到对象table_02,如果用原始的

 

Statement Statmt =comm.createStatement();
String  sql="insert into tb2....";
Statmt.executeUpdate(sql);
newCon.commit();//这里是每执行一条sql插入语句就commit一次
Statmt.close();

当io操作频繁的时候必然会降低sql性能,这里可以采取分批commit的形式减少io操作。

首先定义一个计数器count,当count%1000的时候commit一次,记住最后再commit一次可以把不足1000的剩下数据提交。

其次用batch进行批量提交sql

Statmt.addBatch(sql);        
Statmt.executeBatch();    
 if(count%1000==0){
      newCon.commit();
      Statmt.clearBatch();
}    

/**
    主意有些操作是不可以分批commit的,比如一个完整的事务提交,否则不方便数据回滚处理。
**/
Connection conn = DBPool.getConnection();
conn.setAutoCommit(false);
Statement statmt =conn.createStatement();
statmt.addBatch(sql);        
statmt.executeBatch();   
statmt.addBatch(sql);        
statmt.executeBatch()
.....
statmt.clearBatch();
conn.commit();
/**记得异常回滚和资源关闭*/
statmt.close();
conn.close();

错误归类:

java.sql.BatchUpdateException: 无效的批处理命令: invalid SELECT batch command 0

原因是:sql语句包含了select语句,批量处理只能提交insert、update、delete等操作

 

转载于:https://www.cnblogs.com/zhutouying/p/3156514.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值