私は Linux ユーザーなので、オープンソースで Linux に適したソリューションが望ましいでしょう。
3 に答える
MDB ツールは、Microsoft DLL を使用せずに MS Access データベース (mdb ファイル) からのデータのエクスポートを容易にするオープン ソース ライブラリとユーティリティのセットです。したがって、非 Windows OS はデータを読み取ることができます。別の言い方をすれば、彼らは MDB ファイルのレイアウトをリバース エンジニアリングしています。
Jackcessは、MS Access データベースから読み書きするための純粋な Java ライブラリです。これは、Health Market Science, Inc. の OpenHMS プロジェクトの一部です。アプリケーションではありません。GUI はありません。これは、他の開発者が Java アプリケーションを構築するために使用するためのライブラリです。
ACCESSdbは、Internet Explorer 内でローカルに利用可能な Microsoft Access データベース ファイルに動的に接続してクエリを実行するために使用される JavaScript ライブラリです。
Jackcess と ACCESSdb はどちらも MDB ツールよりも新しく、よりアクティブで、書き込みをサポートしています。
これはおそらくあなたが望む答えではありませんが、これを行う最も安全な方法は、Visual Studio Express を取得し、ODBC コネクタを使用してデータベースを読み取り、ADO.NET Sqlite コネクタを使用してデータを書き出すことです。JETデータベースと対話するための一般的なサードパーティツールを見つけました... JETは恐ろしく、簡単にリバースエンジニアリングされることはありませんでした。
トニーの答えを例で補足するには:
これは、Ubuntu 16.04 で MDB ツールを使用して 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
最後に、Jackcess と Java を使用するmdb-sqliteもあります。Java と をインストールした後ant
:
cd mdb-sqlite-1.0.2
ant dist
java -jar dist/mdb-sqlite.jar "$in" "$out"