java分批读取文件入库代码
时间: 2024-11-12 10:16:31 浏览: 23
在Java中,批量读取文件并将其内容入库通常涉及到IO操作和数据处理。这里是一个简单的示例,使用`BufferedReader`逐行读取大文件,并将每行数据插入到数据库中,例如使用JDBC:
```java
import java.io.BufferedReader;
import java.io.FileReader;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
public class FileToDatabaseBatch {
private static final String FILE_PATH = "path_to_your_file.txt";
private static final String SQL_INSERT = "INSERT INTO your_table (column1, column2) VALUES (?, ?)";
public static void main(String[] args) {
Connection conn = null;
PreparedStatement pstmt = null;
try {
// 加载数据库驱动并建立连接
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/your_database", "username", "password");
// 创建批量PreparedStatement用于提高性能
pstmt = conn.prepareStatement(SQL_INSERT, Statement.RETURN_GENERATED_KEYS);
int batchSize = 100; // 批量大小
BufferedReader reader = new BufferedReader(new FileReader(FILE_PATH));
String line;
int count = 0;
while ((line = reader.readLine()) != null) {
// 解析每一行数据并准备SQL参数
String[] data = line.split(",");
pstmt.setString(1, data[0]);
pstmt.setString(2, data[1]);
// 执行SQL并将结果添加到批次
if (count % batchSize == 0 || !reader.hasNextLine()) { // 每批或文件结束时提交
pstmt.executeBatch();
conn.commit(); // 提交事务
}
count++;
}
// 清理资源,关闭PreparedStatement
pstmt.close();
reader.close();
// 获取最后一笔操作生成的主键
if (conn.getAutoCommit() == false) {
ResultSet generatedKeys = pstmt.getGeneratedKeys();
// ...处理生成的主键...
}
} catch (Exception e) {
// 错误处理
e.printStackTrace();
} finally {
try {
if (pstmt != null) pstmt.close();
if (conn != null) conn.close();
} catch (SQLException ex) {
ex.printStackTrace();
}
}
}
}
```
这个代码假设你的文件是以逗号分隔值(CSV)的形式存在,且数据库表有对应的字段映射。
阅读全文