如何将Access数据库共享到Java桌面应用程序的不同PC?

时间:2015-06-08 09:08:49

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

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

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

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

3 个答案:

答案 0 :(得分:0)

没有。这就像把你的车交给几个人一样,所有人都希望同时驾驶它:它不会因为很多原因而起作用。

解决方法:

  1. 使用像MySQL或H2这样的真实数据库。

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

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

答案 1 :(得分:0)

如果您的应用程序确实使用JDBC-ODBC Bridge(如问题上的标记所建议的那样)和Microsoft Access ODBC Driver然后,那么并发用户应该能够使用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

答案 2 :(得分:0)

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

默认开启模式:共享; 默认记录锁定:无锁;