2013-01-19 97 views
1

我正試圖合併兩個數據庫ms access使用Java。我正在從一個數據庫和另一個來自其他數據庫的連接進行連接。我將每個表中的所有記錄複製到另一個數據庫中的表中。

是否有任何其他解決方案,而不是將記錄從一個數據庫表複製到另一個數據庫表。兩個數據庫都有相同的表結構。使用java合併兩個ms訪問數據庫

+0

你說你已經有一個可行的解決方案。爲什麼你需要一個不同的解決方案有什麼原因嗎? –

+0

這是非常長的解決方案,因爲數據庫有大約50張表,因此它非常冗長。 –

回答

1

大多數情況下,複製關係數據庫比複製表格要複雜得多。例如,您必須考慮數據複製的順序以避免違反完整性。

關於複製的SQL,Access將接受外部mdb/acdb的名稱作爲刪除,所以只要沒有附件或多值字段數據類型,前兩個語句就會工作。另一個問題是自動編號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查詢設計窗口構建的,只是稍作修改。

+0

它可以用於從不同位置合併數據庫 –

+0

sql是針對與數據庫1的連接運行的,並且是指數據庫2.在該示例中,數據庫2是IN Z:\ Docs \ test.accdb,因此是,兩個不同的地點。 – Fionnuala

0

你使用SQL來做到這一點嗎?如果是這樣,那可能是你的SQL代碼的問題,而不是你的java代碼。
您可以對您的程序進行多線程處理,以便將每個表或一組表複製到另一個線程中。如果表名不發生變化,這一點尤其有用,因爲您可以創建一個表名稱數組和一個將名稱放入SQL查詢中的線程子類。如果你使用了10個左右的線程池,這應該加快速度,但要小心,因爲我對access和java的經驗是數據庫很容易損壞,所以在嘗試這個之前確保你有一個備份。