博客 / 詳情

返回

用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

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 中結構化數據批量導入數據庫,適用於數據初始化或用户提交的表格導入場景。進一步還可以加上校驗和數據清洗邏輯,提升導入質量。

user avatar jinjiedefarmer 頭像 sevencode 頭像
2 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.