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等操作

 

posted @ 2013-06-26 14:13  爱笑的狐狸  阅读(735)  评论(0编辑  收藏  举报