【问题标题】:Data change from Java code not detected by Jet/ACE connectionJet/ACE 连接未检测到来自 Java 代码的数据更改
【发布时间】:2016-09-16 15:51:10
【问题描述】:

我正在使用 Jackcess 更新 Access 表中的数据。另一个应用程序正在通过 Microsoft Access 数据库引擎 (Jet) 轮询数据。但是,在我强制它关闭数据库并重新打开它之前,它无法获取更新的数据。

有人知道 Access 数据库引擎如何检测 Jackcess 的数据更改吗?

【问题讨论】:

    标签: ms-access jet ucanaccess jackcess


    【解决方案1】:

    经过一番研究,我发现 Jackcess 是 type 4 数据库驱动程序。它直接读/写数据库文件。 JETS 无法检测到我的 4 型驱动程序所做的更改。为了使用它,我需要一个 JDBC-ODBC 桥,类型 1 数据库驱动程序。我必须从 Java 7 中提取一些代码并将它们放入 Java 8。这仅适用于 32 位 Java,因为 JETS 只有 32 位。

    【讨论】:

      【解决方案2】:

      有人知道 Access 数据库引擎如何检测 Jackcess 的数据更改吗?

      它没有。您的其他应用程序必须关闭并重新打开其 Access 数据库引擎 (ACE/Jet) 连接,才能了解 Jackcess 所做的更改。

      请注意,如果其他 (ACE/Jet) 应用程序也需要对 Access 数据库进行更改,这会产生影响。两个应用程序将相互独立地直接写入 Access 数据库文件,在这种情况下,文件很有可能被损坏。

      就算

      每个应用程序只写入某些表/列。书面上没有重叠/冲突。

      如果所有表都位于同一个数据库文件中,则仍有可能损坏。例如,如果 Jackcess 应用程序分配一个额外的数据页来保存一条新记录,而 Jet/ACE 应用程序还需要分配一个额外的数据页来保存 it 试图插入的其他记录,那么 Jet/ACE 应用程序将不知道 Jackcess 应用程序已经占用了“下一个可用页面”,并会尝试为自己分配相同的页面。充其量,结果将是某种错误。在最坏的情况下,这两个应用程序只会破坏彼此的更改。

      如果这两个应用程序确实确实写入完全独立的表集而没有重叠,那么可以通过将这两组表保存在两个单独的 .accdb 文件中来减轻损坏的危险,使用链接表允许应用程序“在一个地方查看”所有表格。

      【讨论】:

      • 数据库模式是否设计为每个应用程序只写入某些表/列。书面上没有重叠/冲突。
      猜你喜欢
      • 1970-01-01
      • 2018-07-31
      • 2015-10-11
      • 2014-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多