• (十七)使用JDBC进行批处理


    目录


    业务场景:

    当需要向数据库中发送一批SQL语句执行时,应避免向数据库一条条的发送执行,而应采用JDBC的批处理机制,以提升执行效率;

    使用JDBC进行批处理,实现批处理有两种机制;


    第一种方式

    
            Statement.addBatch(sql1) ; 
    
            Statement.addBatch(sql2) ; 
    
            ...
    
            // 内部是 Statement对象维护着一个list对象,保存着批处理的sql语句 ;
    
    
            executeBatch();  // 执行批处理SQL语句:
    
            clearBatch();   // 清楚批处理命令:即清除 list 中的sql语句 ;

    优点:可以向数据库发送多条不同的SQL语句 ;

    缺点:SQL语句没有 预编译当多条SQL语句仅仅是参数不同的时候,也必须呆呆的写多条;


    第二种方式

    
    
        // 先将预编译好的 sql 保存到 prepareStatement对象中,这时候还没有存进 list 里面 ;
    
        prepareStatement(sql);
    
    
    
        // 每次调用prepareStatement对象的setxxxx()方法,都覆盖掉之前的sql语句 ;
    
        // 但是我们调用setxxxx方法之前,就会将之前的sql语句添加进内部的list里面,因此覆盖也没有事
    
        PreparedStatement.setXXXX(....) ;
    
    
    
        // 将预编译的sql语句,加到PreparedStatment对象内部的list中;
    
        PreparedStatement.addBatch();   
    
    
    
        // 将预编译的sql语句,加到PreparedStatment对象内部的list中;
    
        PreparedStatement.addBatch();   
    
    
    
        executeBatch();    // 执行批处理SQL语句:
    
        clearBatch();      // 清楚批处理命令:
    
    

    优点:发送是预编译的SQL语句,执行效率高;

    缺点:只能应用在SQL语句相同,但是参数不同的批处理里面;适用于在同一张表中进行批量数据的操作;


    批处理中的 update() 方法

    用批处理操作数据库,update() 方法返回的是一个数组,里面记录着每一条SQL语句影响的行数 ;


    注意事项

    在进行批处理的时候,一个批不要太大,否则会内存溢出,可以循环批处理;


    备注:

    mysql插入一千万条数据大概要花3小时,而oracle只需要花6分钟; 果然收费还是有收费的道理的 ;

  • 相关阅读:
    hdu5247找连续数(打表)
    hdu5246超级赛亚ACMer
    hdu5246超级赛亚ACMer
    cf534D 枚举握手次数
    cf534D 枚举握手次数
    4467奇妙的方式优化暴力的01边查询
    4467奇妙的方式优化暴力的01边查询
    POJ1364基本的查分约束问题
    POJ1364基本的查分约束问题
    poj1509最小表示法
  • 原文地址:https://www.cnblogs.com/young-youth/p/11665704.html
Copyright © 2020-2023  润新知