java实现批量导入.csv文件到mysql数据库

下面我来详细讲解如何使用Java实现批量导入.csv文件到MySQL数据库的攻略。

一、准备工作

  1. 导入MySQL依赖

在Maven项目中,需要在pom.xml文件中导入MySQL的依赖,代码如下:

<dependency>
   <groupId>mysql</groupId>
   <artifactId>mysql-connector-java</artifactId>
   <version>8.0.11</version>
</dependency>
  1. 创建数据库和表

在MySQL数据库中,需要先创建好导入数据的表,如下所示:

CREATE TABLE test (
  id INT NOT NULL AUTO_INCREMENT,
  name VARCHAR(10) NOT NULL,
  age INT,
  PRIMARY KEY (id)
);

二、CSV文件读取与解析

  1. 读取CSV文件

使用Java中的BufferedReader类可以较方便地读取CSV文件,代码如下:

BufferedReader reader = new BufferedReader(new FileReader("test.csv"));
  1. 解析CSV文件

使用Java中的String类中的split()方法进行解析,代码如下:

String line;
while ((line = reader.readLine()) != null) {
    String[] data = line.split(",");
    // 处理每一行数据
}

三、批量插入到MySQL数据库

  1. 使用Java中的JDBC插入数据

使用Java中的JDBC进行插入数据,代码如下:

Class.forName("com.mysql.cj.jdbc.Driver");
Connection connection = DriverManager.getConnection(url, username, password);
String sql = "INSERT INTO test (name, age) VALUES (?, ?)";
PreparedStatement statement = connection.prepareStatement(sql);
for (String[] data : dataList) {
    statement.setString(1, data[0]);
    statement.setString(2, data[1]);
    statement.addBatch();
}
statement.executeBatch();
  1. 使用MySQL的LOAD DATA INFILE语句插入数据

使用MySQL中的LOAD DATA INFILE语句可以更快地将数据插入到MySQL数据库中,代码如下:

Class.forName("com.mysql.cj.jdbc.Driver");
Connection connection = DriverManager.getConnection(url, username, password);
String sql = "LOAD DATA INFILE 'test.csv' INTO TABLE test FIELDS TERMINATED BY ','";
PreparedStatement statement = connection.prepareStatement(sql);
statement.execute();

示例一:
假设我们有一个名为“student.csv”的文件,里面有姓名(String类型)和年龄(int类型)两列数据,我们需要将这个文件中的数据插入到MySQL的student表中。student表结构如下:

CREATE TABLE student (
    id int(11) NOT NULL AUTO_INCREMENT,
    name varchar(10) DEFAULT NULL,
    age int(11) DEFAULT NULL,
    PRIMARY KEY (id)
);

代码实现:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.util.ArrayList;
import java.util.List;
import java.io.BufferedReader;
import java.io.FileReader;

public class ImportCsv {
    public static void main(String[] args) throws Exception {
        String url = "jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC";
        String username = "root";
        String password = "password";

        Class.forName("com.mysql.cj.jdbc.Driver");
        Connection conn = DriverManager.getConnection(url, username, password);

        String sql = "INSERT INTO student (name, age) VALUES (?, ?)";
        PreparedStatement stmt = conn.prepareStatement(sql);

        List<String[]> dataList = new ArrayList<>();

        try (BufferedReader br = new BufferedReader(new FileReader("student.csv"))) {
            String line;
            while ((line = br.readLine()) != null) {
                String[] data = line.split(",");
                dataList.add(data);
            }
        }

        for (String[] data : dataList) {
            String name = data[0];
            int age = Integer.parseInt(data[1]);

            stmt.setString(1, name);
            stmt.setInt(2, age);

            stmt.addBatch();
        }

        stmt.executeBatch();
        conn.close();
    }
}

示例二:
假设我们有一个名为“user.csv”的文件,里面有用户名(String类型)和密码(String类型)两列数据,我们需要将这个文件中的数据插入到MySQL的user表中。user表结构如下:

CREATE TABLE user (
    id int(11) NOT NULL AUTO_INCREMENT,
    username varchar(10) DEFAULT NULL,
    password varchar(20) DEFAULT NULL,
    PRIMARY KEY (id)
);

代码实现:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.io.BufferedReader;
import java.io.FileReader;

public class ImportCsv {
    public static void main(String[] args) throws Exception {
        String url = "jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC";
        String username = "root";
        String password = "password";

        Class.forName("com.mysql.cj.jdbc.Driver");
        Connection conn = DriverManager.getConnection(url, username, password);

        String sql = "LOAD DATA INFILE 'user.csv' INTO TABLE user FIELDS TERMINATED BY ','";
        PreparedStatement stmt = conn.prepareStatement(sql);

        stmt.execute();
        conn.close();
    }
}

总结一下,Java实现批量导入.csv文件到MySQL数据库,需要先读取并解析CSV文件,然后使用JDBC或者MySQL的LOAD DATA INFILE语句进行批量插入。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java实现批量导入.csv文件到mysql数据库 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • Java实例化类详解

    Java实例化类详解 在Java中,实例化类是创建类对象的过程。当我们创建一个类对象的时候,就可以使用该类所定义的方法和属性。 实例化类的基础知识 我们可以使用 new 关键字来创建一个类的实例,其基本语法如下: ClassName obj = new ClassName(); 其中,ClassName 是需要创建实例的类名,obj 是创建的对象名。在创建对…

    Java 2023年5月26日
    00
  • Java复合语句的使用方法详解

    Java复合语句的使用方法详解 介绍 Java中,复合语句是指一个包含多条语句的语句块,被括号{ }包围,它可以被作为一个单独的语句来使用,是控制语句、方法、类等程序块体的基础。本文将详细讲解Java复合语句的使用方法,包括复合语句的定义、使用场景、语法格式以及示例。 定义 在Java中,复合语句的定义即定义一组语句,这些语句被包含在一对花括号{ }中。在复…

    Java 2023年5月20日
    00
  • Java对字符串进行加密解密

    Java 对字符串进行加密解密攻略 简介 Java 中提供了多种加密解密的方案,涉及对称加密、非对称加密、哈希算法等等。本文将主要讲解在 Java 中对字符串进行加密解密的方法。 对称加密 对称加密是指加密和解密使用同一个密钥的方式,常见的有 AES、DES 等算法。 AES 加密 在 Java 中使用 AES 进行加密解密的主要步骤如下: 生成一个 AES…

    Java 2023年5月26日
    00
  • Java JVM运行时数据区(Run-Time Data Areas)

    Java虚拟机(JVM)运行时数据区包含了Java程序运行时所需的各种数据结构,包括程序计数器(Program Counter Register)、Java堆(Java Heap)、Java方法区(Java Method Area)、本地方法栈(Native Method Stack)和Java虚拟机栈(Java Virtual Machine Stacks…

    Java 2023年5月20日
    00
  • Mybatis 插入和删除批处理操作

    对于“Mybatis插入和删除批处理操作”的完整攻略,可以分为以下几个步骤: 1.配置Mybatis的批处理模式2.编写插入和删除的SQL语句3.使用SqlSession进行批量操作 下面对每一步进行详细的讲解。 1.配置Mybatis的批处理模式 在Mybatis配置文件中,添加以下属性来开启批处理模式。 <configuration> &lt…

    Java 2023年5月19日
    00
  • mybatis自动填充时间字段示例代码

    为了实现 mybatis 自动填充时间字段的功能,需要在实体类中加入 createTime 和 updateTime 字段,并使用注解 @TableField(fill = FieldFill.INSERT) 标记 createTime 字段,在新增时自动填入当前时间,使用注解 @TableField(fill = FieldFill.INSERT_UPDA…

    Java 2023年5月20日
    00
  • Spring Data JPA调用存储过程实例代码

    下面是关于Spring Data JPA调用存储过程的完整攻略。 什么是Spring Data JPA Spring Data JPA是Spring应用程序中使用JPA(Java Persistence API)的一种方法。它的主要目的是简化以前需要执行多个步骤的JPA存储库的实现,例如将存储库实现转换为Spring组件,以及省略常规的存储库查询和操作。使用…

    Java 2023年5月20日
    00
  • Struts2 Result 参数详解

    Struts2 Result 参数详解 在 Struts2 中,结果(Result)是一个非常重要的概念。在 Action 执行完成后,它将根据 Result 配置找到一个 JSP 文件并将其渲染。在本文中,我们将详细探讨 Struts2 Result 中的参数。 结果类型 Struts2 支持多种不同类型的结果,这些结果类型在 struts.xml 文件中…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部