您现在的位置是:java学习笔记 >
java学习笔记
java读取csv文件传入数据库
本 文 目 录
在数据管理领域,CSV(Comma-Separated Values)文件因其简洁和易于处理的特性而被广泛使用。将CSV文件导入数据库是一种常见的操作,尤其是在数据迁移或批量更新的场景中。本文将介绍两种使用Java实现CSV文件导入数据库的方法,并对比它们的特点和使用场景。
CSV文件与数据库导入
CSV文件是一种简单的文本文件,它通过逗号(或其他分隔符)分隔每个字段,每行代表一条记录。导入数据库则是将这些记录转换为数据库中的表和行。这个过程通常涉及解析CSV文件、建立数据库连接、创建表结构以及插入数据。
导入CSV到数据库的重要性
- 数据迁移:在系统升级或更换数据库时,需要将旧数据迁移到新系统中。
- 数据备份:定期将数据库数据导出到CSV文件,便于备份和恢复。
- 数据分析:将数据导出到CSV文件,便于使用数据分析工具进行理。
方法一:使用JDBC和ResultSet
核心类与方法
DriverManager
:用于加载数据库驱动并建立连接。Connection
:代表与数据库的连接。PreparedStatement
:用于执行SQL语句,支持预编译的SQL语句。ResultSet
:用于处理查询结果。
使用场景
这种方法适用于需要高度定制化SQL语句的场景,例如,当CSV文件的结构与数据库表结构不完全匹配时。
代码案例
import java.sql.*;
public class CsvToDatabaseJDBC {
public static void main(String[] args) {
String csvFilePath = "path/to/your/csvfile.csv";
String dbUrl = "jdbc:yourDatabaseUrl";
String user = "username";
String password = "password";
String tableName = "your_table_name";
String[] columns = {"column1", "column2", "column3"}; // 根据CSV文件和数据库表结构调整
try (Connection conn = DriverManager.getConnection(dbUrl, user, password);
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM " + tableName)) {
// 假设CSV文件的第一行是列名
// 这里可以根据实际情况调整
BufferedReader br = new BufferedReader(new FileReader(csvFilePath));
String line;
while ((line = br.readLine()) != null) {
String[] values = line.split(",");
String sql = "INSERT INTO " + tableName + " VALUES(";
for (int i = 0; i < values.length; i++) {
sql += "'" + values[i] + "'";
if (i < values.length - 1) sql += ",";
}
sql += ")";
conn.prepareStatement(sql).executeUpdate();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
方法二:使用Apache Commons CSV
核心类与方法
CSVFormat
:定义CSV文件的格式。CSVParser
:解析CSV文件。CSVPrinter
:将数据写入CSV文件(如果需要)。
使用场景
这种方法适用于CSV文件结构与数据库表结构完全匹配,且不需要复杂SQL操作的场景。
代码案例
import org.apache.commons.csv.*;
import java.io.*;
import java.sql.*;
public class CsvToDatabaseCommons {
public static void main(String[] args) {
String csvFilePath = "path/to/your/csvfile.csv";
String dbUrl = "jdbc:yourDatabaseUrl";
String user = "username";
String password = "password";
String tableName = "your_table_name";
try (Reader in = new FileReader(csvFilePath);
CSVParser parser = new CSVParser(in, CSVFormat.DEFAULT);
Connection conn = DriverManager.getConnection(dbUrl, user, password)) {
String sql = "INSERT INTO " + tableName + " VALUES(?,?,?)";
try (PreparedStatement stmt = conn.prepareStatement(sql)) {
for (CSVRecord record : parser) {
stmt.setString(1, record.get(0));
stmt.setString(2, record.get(1));
stmt.setString(3, record.get(2));
stmt.addBatch();
}
stmt.executeBatch();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
对比表格
特性 | 使用JDBC和ResultSet | 使用Apache Commons CSV |
---|---|---|
灵活性 | 高 | 中 |
性能 | 中 | 高 |
易用性 | 低 | 高 |
适用场景 | 需要复杂SQL操作 | CSV结构与数据库表结构匹配 |
结论
选择哪种方法取决于具体的使用场景和需求。如果需要高度定制化的SQL操作,使用JDBC和ResultSet可能是更好的选择。而如果CSV文件的结构与数据库表结构完全匹配,且需要快速导入数据,使用Apache Commons CSV会更为高效和简单。在实际开发中,可以根据项目需求和团队熟悉度来选择最合适的方法。