在日常數據處理工作中,很多人習慣使用 Excel 進行數據錄入和整理,而將這些數據批量寫入數據庫是一個常見需求。手動複製粘貼效率低下,容易出錯,因此通過 Java 編程語言實現自動導入機制,不僅高效而且更可靠。
本文將演示如何使用 Java 將 Excel 表格數據讀取後插入到 SQLite 數據庫中,適用於初次搭建數據平台或批量錄入數據的場景。
所需技術組件
- Free Spire.XLS for Java:用於讀取 Excel 文件內容
- SQLite:輕量級嵌入式數據庫
- JDBC:用於連接數據庫的 Java API
實現流程
- 解析 Excel 文件,逐行讀取單元格數據;
- 提取每列的字段名作為數據庫表的字段;
- 使用 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文件內容:
生成的SQLite數據庫:
小結
通過 Spire.XLS 結合 JDBC,可以輕鬆將 Excel 中結構化數據批量導入數據庫,適用於數據初始化或用户提交的表格導入場景。進一步還可以加上校驗和數據清洗邏輯,提升導入質量。