8

我是 Linux 用户,因此更可取的是开源、Linux 友好的解决方案。

4

3 回答 3

7

MDB Tools是一组开放源代码库和实用程序,可方便地从 MS Access 数据库(mdb 文件)导出数据,而无需使用 Microsoft DLL。因此非 Windows 操作系统可以读取数据。或者,换句话说,他们正在对 MDB 文件的布局进行逆向工程。

Jackcess是一个纯 Java 库,用于读取和写入 MS Access 数据库。它是 Health Market Science, Inc. 的 OpenHMS 项目的一部分。它不是一个应用程序。没有图形用户界面。它是一个库,旨在供其他开发人员用来构建 Java 应用程序。

ACCESSdb是一个 JavaScript 库,用于在 Internet Explorer 中动态连接和查询本地可用的 Microsoft Access 数据库文件。

Jackcess 和 ACCESSdb 都比 MDB 工具更新,更活跃并且有写支持。

于 2010-05-06T17:58:44.620 回答
2

这可能不是您想要的答案,但最安全的方法是获取 Visual Studio Express 并使用 ODBC 连接器读取数据库,然后使用 ADO.NET Sqlite 连接器写出数据。我发现通常第三方工具可以与 JET 数据库对话...... JET 非常棒,而且从不轻易进行逆向工程。

于 2010-04-01T12:02:51.860 回答
1

用例子补充托尼的回答:

这就是我刚刚在 Ubuntu 16.04 中使用 MDB Tools 转换为 sqlite 的方式:

sudo apt install mdbtools

# define variables for easier copy/paste of the rest
in="my-jet4-file"
schema="$in-schema.sql"
out="$in.sqlite"

mdb-schema "$in" sqlite > "$schema"
sqlite3 "$out"          < "$schema"
mdb-tables -1 "$in" \
| while read table; do \
    mdb-export -I sqlite "$in" "$table" | sqlite3 "$out"; \
  done

这使用了 Insert 语句,而且速度很慢。

更快的替代方法是导出/导入 .csv 文件。我已经成功地使用了 Postgres:

#...
out="my_pg_db"

createdb "$out"
mdb-schema "$in" postgres   > "$schema"
psql -U postgres -d "$out" -f "$schema"
mdb-tables -1 "$in" \
| while read table; do \
    mdb-export -d'|' "$in" "$table" > "$table.csv"; \
    psql -d "$out" -c "COPY \"$table\" FROM '$table.csv' DELIMITER '|' CSV HEADER"
  done

最后,还有mdb-sqlite,它使用 Jackcess 和 Java。安装 Java 后ant

cd mdb-sqlite-1.0.2
ant dist
java -jar dist/mdb-sqlite.jar "$in" "$out"
于 2018-03-18T19:19:21.987 回答