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

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

所需技术组件

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

实现流程

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

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

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

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

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

        try (Connection conn = DriverManager.getConnection(dbPath)) {
            System.out.println("SQLite database connection/creation succeeded.");

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

                // 获取列名(第一行)
                List<String> 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("Worksheet \"" + tableName + "\" import succeeded!");
            }

        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }
}

示例Excel文件内容
Java导入Excel文件数据到数据库示例文档

生成的SQLite数据库
Java导入Excel文件数据到数据库结果

小结

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


大丸子
78 声望8 粉丝