使用线程池,使用java,快速将文本文件的内容插入到数据库中
时间: 2024-03-07 10:48:37 浏览: 28
你可以使用线程池来快速将文本文件的内容插入到数据库中,可以提高程序的效率。以下是一个示例代码:
```java
import java.io.BufferedReader;
import java.io.FileReader;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class InsertTextFileToDatabaseWithThreadPool {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/mydatabase";
String username = "root";
String password = "password";
String filePath = "textfile.txt";
int threadPoolSize = 10;
ExecutorService executor = Executors.newFixedThreadPool(threadPoolSize);
try (Connection conn = DriverManager.getConnection(url, username, password);
BufferedReader br = new BufferedReader(new FileReader(filePath))) {
String line;
String sql = "INSERT INTO textfiles (content) VALUES (?)";
PreparedStatement pstmt = conn.prepareStatement(sql);
while ((line = br.readLine()) != null) {
String content = line;
executor.execute(() -> {
try {
pstmt.setString(1, content);
pstmt.executeUpdate();
} catch (Exception ex) {
ex.printStackTrace();
}
});
}
executor.shutdown();
while (!executor.isTerminated()) {
// 等待线程池中的所有任务执行完毕
}
System.out.println("Text file inserted to database.");
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
```
在这个示例中,我们创建了一个大小为 10 的固定线程池。我们使用 BufferedReader 类读取名为 "textfile.txt" 的文本文件的内容。在读取到每一行文本内容时,我们将该行内容提交到线程池中执行。
我们使用 PreparedStatement 类执行 SQL 语句,将文本内容插入到 "textfiles" 表格中的 "content" 字段中。我们在线程执行时捕获可能抛出的异常。
最后,我们关闭线程池,并等待线程池中的所有任务执行完毕。输出一条消息,表示文本文件已经插入到数据库中。