下面我来详细讲解如何使用Java实现批量导入.csv文件到MySQL数据库的攻略。
一、准备工作
- 导入MySQL依赖
在Maven项目中,需要在pom.xml文件中导入MySQL的依赖,代码如下:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.11</version>
</dependency>
- 创建数据库和表
在MySQL数据库中,需要先创建好导入数据的表,如下所示:
CREATE TABLE test (
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(10) NOT NULL,
age INT,
PRIMARY KEY (id)
);
二、CSV文件读取与解析
- 读取CSV文件
使用Java中的BufferedReader类可以较方便地读取CSV文件,代码如下:
BufferedReader reader = new BufferedReader(new FileReader("test.csv"));
- 解析CSV文件
使用Java中的String类中的split()方法进行解析,代码如下:
String line;
while ((line = reader.readLine()) != null) {
String[] data = line.split(",");
// 处理每一行数据
}
三、批量插入到MySQL数据库
- 使用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();
- 使用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技术站