马士兵java架构师

您现在的位置是:java学习笔记 >

java学习笔记

java读取csv文件传入数据库

2024-05-28 02:31:34java学习笔记 本文浏览次数:0 百度已收录

本 文 目 录

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();
        }
    }
}

java读取csv文件传入数据库

方法二:使用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();
        }
    }
}

java读取csv文件传入数据库

对比表格

特性 使用JDBC和ResultSet 使用Apache Commons CSV
灵活性
性能
易用性
适用场景 需要复杂SQL操作 CSV结构与数据库表结构匹配

结论

选择哪种方法取决于具体的使用场景和需求。如果需要高度定制化的SQL操作,使用JDBC和ResultSet可能是更好的选择。而如果CSV文件的结构与数据库表结构完全匹配,且需要快速导入数据,使用Apache Commons CSV会更为高效和简单。在实际开发中,可以根据项目需求和团队熟悉度来选择最合适的方法。