在日常数据处理工作中,很多人习惯使用 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 中结构化数据批量导入数据库,适用于数据初始化或用户提交的表格导入场景。进一步还可以加上校验和数据清洗逻辑,提升导入质量。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。