用Java将Excel数据导入到SQLite数据库

在日常数据处理工作中,很多人习惯使用 Excel 进行数据录入和整理,而将这些数据批量写入数据库是一个常见需求。手动复制粘贴效率低下,容易出错,因此通过 Java 编程语言实现自动导入机制,不仅高效而且更可靠。

本文将演示如何使用 Java 将 Excel 表格数据读取后插入到 SQLite 数据库中,适用于初次搭建数据平台或批量录入数据的场景。

所需技术组件

  • Free Spire.XLS for Java:用于读取 Excel 文件内容
  • SQLite:轻量级嵌入式数据库
  • JDBC:用于连接数据库的 Java API

实现流程

  1. 解析 Excel 文件,逐行读取单元格数据;
  2. 提取每列的字段名作为数据库表的字段;
  3. 使用 JDBC 将数据写入对应的 SQLite 表。

Java代码示例:Excel 数据写入 SQLite

java
import com.spire.xls.*;
import java.sql.*;
import java.util.*;

public class ExcelToSQLite {
    public static void main(String[] args) {
        String excelPath = "example.xlsx";
        String dbPath = "jdbc:sqlite:excel_data.db"; // SQLite 数据库文件名

        // 加载 Excel 文件
        Workbook workbook = new Workbook();
        workbook.loadFromFile(excelPath);

        try (Connection conn = DriverManager.getConnection(dbPath)) {
            System.out.println("SQLite 数据库已连接/创建成功。");

            for (Worksheet sheet : workbook.getWorksheets()) {
                String tableName = sheet.getName().replaceAll("[^a-zA-Z0-9_]", "_"); // 避免非法字符
                CellRange range = sheet.getAllocatedRange();
                int rowCount = range.getRowCount();
                int colCount = range.getColumnCount();

                // 获取列名(第一行)
                List columns = new ArrayList<>();
                for (int col = 1; col <= colCount; col++) {
                    String colName = sheet.getCellRange(1, col).getText().trim();
                    if (colName.isEmpty()) {
                        colName = "Column" + col;
                    }
                    columns.add(colName.replaceAll("[^a-zA-Z0-9_]", "_"));
                }

                // 创建表
                StringBuilder createSQL = new StringBuilder("CREATE TABLE IF NOT EXISTS `" + tableName + "` (");
                for (String col : columns) {
                    createSQL.append("`").append(col).append("` TEXT,");
                }
                createSQL.setLength(createSQL.length() - 1);
                createSQL.append(");");

                try (Statement stmt = conn.createStatement()) {
                    stmt.execute(createSQL.toString());
                }

                // 插入数据
                String placeholders = String.join(",", Collections.nCopies(columns.size(), "?"));
                String insertSQL = "INSERT INTO `" + tableName + "` (" + String.join(",", columns) + ") VALUES (" + placeholders + ")";
                try (PreparedStatement pstmt = conn.prepareStatement(insertSQL)) {
                    for (int row = 2; row <= rowCount; row++) {
                        for (int col = 1; col <= colCount; col++) {
                            String value = sheet.getCellRange(row, col).getText();
                            pstmt.setString(col, value);
                        }
                        pstmt.executeUpdate();
                    }
                }

                System.out.println("工作表 \"" + tableName + "\" 导入成功!");
            }

        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

小结

通过 Spire.XLS 结合 JDBC,可以轻松将 Excel 中结构化数据批量导入数据库,适用于数据初始化或用户提交的表格导入场景。进一步还可以加上校验和数据清洗逻辑,提升导入质量。

你可能感兴趣的:(用Java将Excel数据导入到SQLite数据库)