zoukankan      html  css  js  c++  java
  • 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等操作

  • 相关阅读:
    [转]只有程序员才能看懂的幽默
    论安防集成管理平台规范标准建设的重要性和必要性
    视频集成技术演进与创新实践
    (转)jQuery中Ajax事件beforesend及各参数含义
    (转)如何打一手好Log
    marquee标签
    如何学习Git,如何使用Git
    学习vue
    python安装教程
    Jmeter压力测试(入门篇)
  • 原文地址:https://www.cnblogs.com/zhutouying/p/3156514.html
Copyright © 2011-2022 走看看