JDBC-批量处理数据(练习)

Posted Vodka~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JDBC-批量处理数据(练习)相关的知识,希望对你有一定的参考价值。

package PreparedStatementCURD;
import Instrument.GetConnection;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;

/**
 * @description 批量插入数据
 * @author Vodka
 * @date 2021/07//0:00
 */

/*
*
*   方式二:
* */

public class BatchDataProcessing {
    public static void main(String [] args){
         BatchInsertTwo();

    }

//    批量插入的方式一: 使用PreparedStatement
    public static void BatchInsertOne(){
        try {
            Connection conn =  GetConnection.getConnection();
            String sql = "Insert into Users (id, UName, UAge) values(?,?,?)";
            PreparedStatement ps = conn.prepareStatement(sql);
            for (int index =0 ; index < 20000; ++index ){
                //先试用Statement语句测试
                ps.setObject(1,index+1);
                ps.setObject(2,"User"+index);
                ps.setObject(3,2*index);
                ps.execute();
            }


        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
    }

//    批量插入的方式二:1. addBatch()   2.executeBatch()   3.clearBatch()  ,大大地提升了处理速度
//    mysql是默认关闭数据批量处理的,需要在配置文件添加参数,让mysql支持批处理。 ?rewriteBatchedStatements=true,
//    写在配置文件的url后面
    public static void BatchInsertTwo(){
        Connection conn = null;
        PreparedStatement ps = null;
        try {
            conn = GetConnection.getConnection();
            //记录插入开始的时间
            long StartTime =  System.currentTimeMillis();
            //设置不允许自动提交数据 。 数据库的DML操作设置是默认提交,这样就不能数据出错时回滚了
            conn.setAutoCommit(false);
             String sql = "Insert into Users (id,UName,UAge) values(?,?,?)";
            ps = conn.prepareStatement(sql);
            int temp = 0;   //用来标记累积sql语句的多少
             for(int index = 100001 ; index < 1000000; ++index){
                 ps.setObject(1,index );
                 ps.setObject(2,"User"+index);
                 ps.setObject(3,index*2);

                 //1.累积SQL
                 ps.addBatch();
                 temp++;
                 //2.假设累积到500条,就执行批量插入
                 if(temp % 500 == 0){
                     ps.executeBatch();
                     temp = 0;
                 }
                 //3.清空上一批累积的Batch
                 ps.clearBatch();
             }
             //记录插入完成后的时间
            long EndTime = System.currentTimeMillis();
             System.out.println("批量插入数据所用的时间:"+ (EndTime - StartTime) +"ms");


        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
    }
}

以上是关于JDBC-批量处理数据(练习)的主要内容,如果未能解决你的问题,请参考以下文章

Java批量插入更新操作

javaWeb_JDBC_JDBC批处理

JDBC事务处理&批量处理

jdbc批量插入实现大批量数据快速插入

JDBC学习笔记——事务的隔离级别&批量处理

百万级别数据批量插入 MySQL,哪种方式最快?