【问题标题】:How to share an Access database to different pc's for a Java desktop application?如何为 Java 桌面应用程序将 Access 数据库共享到不同的 pc?
【发布时间】:2015-06-08 09:08:49
【问题描述】:

我正在用 JAVA(RCP 插件)创建一个桌面应用程序,并且我正在使用 MS Access 作为我的应用程序的数据库。

我将数据库文件保存在某个共享位置,但每当我尝试从不同的机器打开它时,它会抛出异常,说数据库已被其他人锁定。 请告诉我如何解决此问题。

有没有办法使用 JDBC 连接在不同机器之间共享 MS Access 数据库文件?

【问题讨论】:

  • 没办法。我建议获取一个真正的数据库。

标签: java database ms-access jdbc jdbc-odbc


【解决方案1】:

没有。这就像把你的车给几个人,所有人都想同时驾驶它:它不会有很多原因。

解决方法:

  1. 使用真正的数据库,如 MySQL 或 H2。

  2. 创建一个与 Access 数据库对话的 Java 服务器。让所有其他程序与此服务器通信。

注意:当您使用方法#2 时,您不能在“其他程序”中使用 JDBC。您必须编写自己的协议。

【讨论】:

    【解决方案2】:

    如果您的应用程序确实使用 JDBC-ODBC 桥接器(正如您问题中的 标记所建议的那样)和 Microsoft Access ODBC 驱动程序,那么 ,并发用户数量适中应该能够使用您的 Java 应用程序来处理共享的 Access 数据库。

    问题中所述行为的最常见原因是 Access 数据库文件(.accdb 或 .mdb)所在的文件夹权限不足。 Access 使用“锁定文件”(.laccdb 或 .ldb)来管理多个并发用户,因此所有用户都必须对 文件夹 具有“更改”权限,以便他们可以创建和/或更新锁定文件。

    例如,如果您的共享 Access 数据库驻留在映射到 Z: 驱动器的所有用户的服务器共享中,并且您的 Java 代码看起来像这样......

    // (Note: Only for Java 7 or earlier.)
    String url = "jdbc:odbc:" +
            "Driver={Microsoft Access Driver (*.mdb, *.accdb)};" +
            "DBQ=Z:/test/myTest.mdb;";
    try (Connection conn = DriverManager.getConnection(url)) {
        // do useful stuff here
    } catch (Exception e) {
        e.printStackTrace(System.err);
    }
    

    ...那么您需要确保所有用户都对“Z:\test”文件夹具有“更改”权限。

    更详细的解释见我的另一个回答here

    【讨论】:

    • 你能分享一些代码 sn-p 来访问提到的数据库,因为我觉得你分享的链接更多的是在后端和前端分割数据库文件。
    • @DeepakSharma 这只是一个普通的 ODBC 连接字符串。我已经用一个例子更新了我的答案。
    【解决方案3】:

    我相信您可以为 MS Access 中的多用户选项进行一些设置。请按照以下步骤操作。打开 MS Access (2016),导航到文件 > 选项 > 客户端设置 > 滚动到高级:-

    默认打开方式:共享; 默认记录锁定:无锁定;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-24
      • 1970-01-01
      • 2011-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-23
      相关资源
      最近更新 更多