2016-09-16 22 views
1

我正在使用Jackcess更新Access表中的數據。另一個應用程序是通過Microsoft Access數據庫引擎(Jet)輪詢數據。但是,直到我強制關閉數據庫並重新打開數據庫時才能獲取更新的數據。未通過Jet/ACE連接檢測到Java代碼的數據更改

有誰知道Access數據庫引擎如何通過Jackcess檢測數據更改?

回答

0

有誰知道Access數據庫引擎如何通過Jackcess檢測數據更改嗎?

它沒有。您的其他應用程序將不得不關閉並重新打開Access數據庫引擎(ACE/Jet)連接,以便了解Jackcess所做的更改。

請注意,如果其他(ACE/Jet)應用程序還需要將修改爲到Access數據庫,這會產生影響。這兩個應用程序都將直接寫入Access數據庫文件,彼此獨立,在這種情況下,文件被破壞的可能性很大。

即使

每個應用程序只在寫入特定表/列。寫作沒有重疊/衝突。

如果所有表都駐留在同一個數據庫文件中,仍然存在損壞的可能性。例如,如果Jackcess應用程序分配一個額外的數據頁面來保存一條新記錄,並且Jet/ACE應用程序還需要分配一個額外的數據頁面以保存其他記錄,那麼Jet/ACE應用程序將嘗試插入其他記錄, ACE應用程序不會意識到Jackcess應用程序已經採用了「下一個可用頁面」,並會嘗試爲自己分配相同的頁面。最好的結果是某種錯誤;在最壞的情況下,這兩個應用程序只會打斷對方的變化。

如果兩個應用程序確實寫入完全獨立的表並且沒有重疊,那麼可以通過將兩組表保存在兩個單獨的.accdb文件中,使用鏈接表來允許應用程序在一個地方「查看」所有表格。

+0

是否將數據庫模式設計爲​​每個應用程序只寫入特定的表/列。寫作沒有重疊/衝突。 –

0

經過一番研究,我發現Jackcess是第4類數據庫驅動程序。它直接讀/寫數據庫文件。 JETS無法檢測到我的4型驅動程序所做的更改。爲了使用它,我需要一個JDBC-ODBC橋接器,類型1的數據庫驅動程序。我必須從Java 7中提取一些代碼並將它們放到Java 8中。這僅適用於32位Java,因爲JETS只有32位。