当前位置:   article > 正文

MySQL批量插入数据(addBatch(),executeBatch())(解决数据库插入汉字乱码问题)

addbatch()

利用addBatch()和executeBatch()批量插入数据

  1. addBatch()将多条sql语句装载在一起
  2. executeBatch()将addBatch()装载在一起的多条sql语句一次性执行,并返回一个数组,每执行成功一次就在数组中添加一个1,否则添加一个0

现在有一个需求,将99条学生信息加载到表studentTest中,并且每一条数据都变成十条,总共990条数据
使用连接池来连接数据库,下面是DBCP连接池工具类的代码

package com.demo.spring.util;
import org.apache.commons.dbcp2.BasicDataSource;

import java.sql.Connection;
import java.sql.SQLException;
public class DBCPUtil {
    private static BasicDataSource bds;
    static {
        System.out.println("创建连接池");
        bds = new BasicDataSource();
        // 配置连接池大小
        bds.setInitialSize(5);
        //配置连接信息
        bds.setUrl("jdbc:mysql://master:3306/show1?useUnicode=true&characterEncoding=utf-8");
        bds.setDriverClassName("com.mysql.jdbc.Driver");
        bds.setUsername("root");
        bds.setPassword("123456");
    }

    public static Connection getConn(){
        System.out.println("获取连接");
        try {
            return bds.getConnection();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

这里需要注意的是,在获取数据库信息时,要在后面配置一下编码格式,否则插入到数据库中的汉字会变成乱码
在数据库名后面加上 ?useUnicode=true&characterEncoding=utf-8

然后就是具体插入数据的代码

package com.demo.spring.test;

import com.demo.spring.util.DBCPUtil;
import java.io.BufferedReader;
import java.io.FileReader;
import java.sql.Connection;
import java.sql.PreparedStatement;

public class BatchMySQL {
    public static void main(String[] args) throws Exception{
        String path="F:\\idea2018.1\\workplace\\spring\\src\\main\\resources\\words\\students.txt";
        BufferedReader br = new BufferedReader(new FileReader(path));
        String line;
        Connection conn = null;
        PreparedStatement ps = null;
        while((line=br.readLine())!=null){
            String[] split = line.split(",");
            String id = split[0];
            String name = split[1];
            String age = split[2];
            String sex = split[3];
            String clazz = split[4];
            //插入数据
            conn=DBCPUtil.getConn();
            String sql = "insert into studentTest values(?,?,?,?,?)";
            ps=conn.prepareStatement(sql);
            //这里是将students文件里面的每一行内容,都变成10条,然后插入数据库中
            //为了避免主键重复,所以每一行内容的id都加上for循环的i
            for(int i=1;i<=10;i++){
                String newid = id+i;
                ps.setString(1,newid);
                ps.setString(2,name);
                ps.setString(3,age);
                ps.setString(4,sex);
                ps.setString(5,clazz);
                //students文件里面有99行内容,每一行都变成十行,总计990行
                //990行如果一条一条插入速度太慢,所以批量插入
                //addBatch()是把若干sql语句装载到一起,然后一次性传送到数据库执行,即是批量处理sql数据的
                //将当前循环的sql语句加入addBatch(),一共循环十次,所以一个批次有十行sql语句
                ps.addBatch();
            }
            //这里是把一条语句经过for循环后变成的十条语句作为一个批次进行执行
            //按批次执行sql语句
            ps.executeBatch();
            System.out.println("单条数据放大十倍后的批量插入完成");
            ps.close();
            conn.close();
        }
        br.close();
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51

在这里插入图片描述
到数据库中查询
在这里插入图片描述
再查询一下行数 select count(*) from studentTest;
在这里插入图片描述
批量插入数据成功,另外看一下executeBatch()获取的数组情况

package com.demo.spring.test;

import com.demo.spring.util.DBCPUtil;
import java.io.BufferedReader;
import java.io.FileReader;
import java.sql.Connection;
import java.sql.PreparedStatement;

public class BatchMySQL {
    public static void main(String[] args) throws Exception{
        String path="F:\\idea2018.1\\workplace\\spring\\src\\main\\resources\\words\\students.txt";
        BufferedReader br = new BufferedReader(new FileReader(path));
        String line;
        int count=0;
        Connection conn = null;
        PreparedStatement ps = null;
        while((line=br.readLine())!=null){
            String[] split = line.split(",");
            String id = split[0];
            String name = split[1];
            String age = split[2];
            String sex = split[3];
            String clazz = split[4];
            conn=DBCPUtil.getConn();
            String sql = "insert into studentTest values(?,?,?,?,?)";
            ps=conn.prepareStatement(sql);
            for(int i=1;i<=10;i++){
                String newid = id+i;
                ps.setString(1,newid);
                ps.setString(2,name);
                ps.setString(3,age);
                ps.setString(4,sex);
                ps.setString(5,clazz);

                ps.addBatch();
            }
            int[] ints = ps.executeBatch();
            for (int anInt : ints) {
                if(anInt==1){
                    count+=1;
                }
            }
            System.out.println("总共增加了"+count+"条数据");
            ps.close();
            conn.close();
        }
        br.close();
    }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
同样的,创建成功

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/二进制舞者/article/detail/61816?site
推荐阅读
相关标签
  

闽ICP备14008679号