java 多线程数据导入 msyql
时间: 2023-10-12 17:00:36 浏览: 135
你可以使用Java多线程来实现数据导入MySQL的功能。下面是一个简单的示例代码:
```java
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class DataImporter {
private static final String DB_URL = "jdbc:mysql://localhost:3306/mydatabase";
private static final String DB_USER = "username";
private static final String DB_PASSWORD = "password";
public static void main(String[] args) {
List<String> data = getDataToImport(); // 获取待导入的数据
int numThreads = 5; // 设置线程数
int batchSize = data.size() / numThreads; // 每个线程处理的数据量
List<Thread> threads = new ArrayList<>();
for (int i = 0; i < numThreads; i++) {
int start = i * batchSize;
int end = (i == numThreads - 1) ? data.size() : (i + 1) * batchSize;
List<String> subData = data.subList(start, end);
Thread thread = new Thread(() -> {
try {
importData(subData); // 导入数据到MySQL
} catch (SQLException e) {
e.printStackTrace();
}
});
thread.start();
threads.add(thread);
}
// 等待所有线程完成
for (Thread thread : threads) {
try {
thread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("数据导入完成!");
}
private static List<String> getDataToImport() {
// 返回待导入的数据
// TODO: 实现该方法,获取数据源
return null;
}
private static void importData(List<String> data) throws SQLException {
try (Connection conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD)) {
String sql = "INSERT INTO mytable (column1, column2) VALUES (?, ?)";
PreparedStatement pstmt = conn.prepareStatement(sql);
for (String item : data) {
// 设置参数
// TODO: 根据数据格式和表结构,设置参数的值
pstmt.setString(1, item);
pstmt.setString(2, item);
pstmt.addBatch(); // 添加到批处理
}
pstmt.executeBatch(); // 执行批处理
}
}
}
```
请根据你的实际情况修改代码中的数据库连接信息、表名、列名以及获取数据源的方式。这段代码将会使用多个线程来并行地导入数据到MySQL数据库。每个线程处理一部分数据,最后等待所有线程完成后输出导入完成的消息。
阅读全文