Java 应用程序在linux环境中读取和写入 Microsoft Access 数据库(包括 .mdb 和 .accdb 格式)的开源库

com.healthmarketscience.jackcess 是一个用于在 Java 应用程序中读取和写入 Microsoft Access 数据库(包括 .mdb.accdb 格式)的开源库。它不依赖于 Microsoft Office 或任何本地驱动程序,提供纯 Java 实现,便于集成到跨平台应用中。

主要功能与特性

  • 跨平台支持:可在任何支持 Java 的操作系统上运行,无需安装 Access 或 ODBC 驱动。
  • 支持版本广泛:兼容从 Access 2000 到 Access 2019 的数据库文件格式。
  • 无 GUI:作为一个底层工具库,专注于程序化操作,不提供图形界面。
  • 灵活的数据操作:支持读取、写入、创建表、修改结构等操作,并可通过自定义过滤器控制数据导出。
  • 开源协议:遵循 Apache License 2.0,可免费用于商业和非商业项目。

核心类与使用示例

  1. 打开数据库
    使用 DatabaseBuilder 打开或创建数据库文件:
import com.healthmarketscience.jackcess.Database;
import com.healthmarketscience.jackcess.DatabaseBuilder;
import java.io.File;

try (Database db = DatabaseBuilder.open(new File("path/to/your/database.accdb"))) {
    // 数据库操作在此处进行
} catch (IOException e) {
    e.printStackTrace();
}
  1. 读取表数据
    通过 Table 对象遍历记录:
import com.healthmarketscience.jackcess.Table;
import com.healthmarketscience.jackcess.Row;

Table table = db.getTable("TableName");
for (Row row : table) {
    System.out.println("ID: " + row.get("ID") + ", Name: " + row.get("Name"));
}
  1. 写入数据
    向表中添加新行:
Object[] rowData = {1, "Alice", 25};
table.addRow(rowData);
  1. 创建新表
    使用 ColumnBuilder 定义字段结构:
import com.healthmarketscience.jackcess.ColumnBuilder;
import com.healthmarketscience.jackcess.SqlType;

Table newTable = db.createTable("NewTable",
    ColumnBuilder.UUID("id"),
    ColumnBuilder.text("name", 255),
    ColumnBuilder.number("age", SqlType.INTEGER)
);
  1. 导出特定列(自定义过滤)
    通过继承 SimpleExportFilter 实现列筛选:
import com.healthmarketscience.jackcess.Column;
import com.healthmarketscience.jackcess.util.ExportFilter;
import com.healthmarketscience.jackcess.util.ExportUtil;
import java.util.ArrayList;
import java.util.List;

ExportFilter filter = new ExportFilter() {
    private List<Column> cols = new ArrayList<>();
    private int idx = 0;

    @Override
    public List<Column> filterColumns(List<Column> columns) {
        for (Column col : columns) {
            if (idx++ < 3) cols.add(col); // 只导出前3列
        }
        return cols;
    }
};

ExportUtil.exportFile(db, "TableName", new File("output.csv"), true, ",", filter);

Maven 依赖配置

pom.xml 中添加以下依赖(推荐使用最新稳定版,如 3.0.1):

<dependency>
    <groupId>com.healthmarketscience.jackcess</groupId>
    <artifactId>jackcess</artifactId>
    <version>3.0.1</version>
</dependency>

注意:部分旧版本可能依赖 commons-lang,而新版本(如 3.x)已迁移到 commons-lang3,请确保依赖兼容性。

注意事项

  • 表名和字段名区分大小写,需与 Access 中实际名称完全一致。
  • 对于加密的 Access 数据库(如密码保护),需额外引入 jackcess-encrypt 依赖。
  • 建议使用 try-with-resources 语句自动关闭数据库连接,避免资源泄漏。

该库是 Java 开发中处理 Access 数据库的主流选择,尤其适用于需要在无 Office 环境下进行数据迁移、ETL 或系统集成的场景。

posted @ 2026-02-11 13:59  dcrenl  阅读(48)  评论(0)    收藏  举报