ms access
を使用して2 つのデータベースをマージしようとしていますJava
。あるデータベースからの接続と、他のデータベースからの別の接続を行っています。各テーブルのすべてのレコードを別のデータベースのテーブルにコピーしています。
あるデータベース テーブルから別のデータベース テーブルにレコードをコピーする以外の解決策はありますか。両方のデータベースのテーブル構造は同じです。
2 に答える
ほとんどの場合、リレーショナル データベースのコピーには、単にテーブルをコピーするだけではありません。たとえば、整合性に違反しないように、データがコピーされる順序を考慮する必要があります。
コピー用のSQLに関しては、Accessは外部のmdb/acdbの名前をdetinationとして受け入れるので、アタッチメントや複数値フィールドのデータ型がない限り、最初の2つのステートメントは機能します。もう 1 つの問題は、ID の自動番号付けです。ID が重複する可能性がある場合、INSERT INTO は安全ではありません。重複する可能性があるからです。
SELECT * INTO AnotherTest IN 'Z:\Docs\test.accdb'
FROM test;
INSERT INTO AnotherTest IN 'Z:\Docs\test.accdb'
SELECT *
FROM test;
上記の INSERT はしばしば機能しますが、自動採番フィールドを省略してフィールドをリストする方がはるかに安全です。
INSERT INTO AnotherTest ( AText, ADate, ANumber ) IN 'Z:\Docs\test.accdb'
SELECT test.AText, test.ADate, test.ANumber
FROM test;
すべてのステートメントは、MS Access クエリ デザイン ウィンドウを使用して構築され、わずかに変更されただけです。
これを行うためにSQLを使用していますか?もしそうなら、それはおそらくJavaコードではなくSQLコードの問題です。
各テーブルまたはテーブルのセットが異なるスレッドにコピーされるように、プログラムをマルチスレッド化できます。これは、テーブル名の配列と、名前を SQL クエリに入れるスレッド サブクラスを作成できるため、テーブル名が変更されない場合に特に便利です。10 程度のスレッドのスレッド プールを使用した場合、速度が向上するはずですが、アクセスと Java に関する私の経験では、データベースが非常に簡単に破損する可能性があるため、これには注意してください。これを試す前にバックアップがあることを確認してください。