我是 Linux 用户,因此更可取的是开源、Linux 友好的解决方案。
3 回答
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 工具更新,更活跃并且有写支持。
这可能不是您想要的答案,但最安全的方法是获取 Visual Studio Express 并使用 ODBC 连接器读取数据库,然后使用 ADO.NET Sqlite 连接器写出数据。我发现通常第三方工具可以与 JET 数据库对话...... JET 非常棒,而且从不轻易进行逆向工程。
用例子补充托尼的回答:
这就是我刚刚在 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"