【问题标题】:Unable to connect to a database on a shared drive - UCanAccess无法连接到共享驱动器上的数据库 - UCanAccess
【发布时间】:2015-10-27 04:24:27
【问题描述】:

我已将我的应用程序设置为通过 UCanAccess 连接到 Access 数据库,但是我无法连接到位于共享驱动器上的数据库。请参阅下面的示例。

String databasePath = "jdbc:ucanaccess://C:/Desktop/MyDB.accdb"  \\\\ this works
String databasePath = "jdbc:ucanaccess://servername/etc/MyDB.accdb" \\\\ does not work and throws no suitable driver found exception

当我将共享驱动器上的文件夹映射到某个字母时,这已经足够有趣了,例如P: - 连接成功。

String databasePath = "jdbc:ucanaccess://P:/servername/etc/MyDB.accdb"  \\\\ this works

有可能绕过这个吗?我的用户对该文件夹具有读/写权限,但我不想在每台机器上映射驱动器。 谢谢

【问题讨论】:

  • 当您尝试 //servername 时,jdbc 驱动程序必须处理文件服务器的 smb/cifs 协议,而他不能。您需要操作系统来处理共享的网络部分。在将共享映射到驱动器号后,jdbc 会尝试像访问本地文件一样访问它,而您的操作系统正在处理 smb/cifs。就这些

标签: java jdbc ucanaccess


【解决方案1】:

您的连接 URL 中没有足够的正斜杠来表示 UNC 路径。正如您所指出的,对于到 C:\Desktop\MyDB.accdb 的本地连接,您可以使用

String databasePath = "jdbc:ucanaccess://C:/Desktop/MyDB.accdb";

同样,对于到 \\servername\etc\MyDB.accdb 的 UNC 连接,您可以使用

String databasePath = "jdbc:ucanaccess:////servername/etc/MyDB.accdb";

【讨论】:

  • 它就像一个魅力。我有一种奇怪的感觉,就像斜线一样微不足道。感谢 Gord 解决了这个问题。
【解决方案2】:

数据库驱动程序只能处理他指定的协议。 大多数jdbc驱动只能处理他特定数据库服务器的网络协议。

您正在使用访问 jdbc 驱动程序,它只能处理对给定 accdb 文件的文件访问。

当你尝试这样的网址时:

jdbc:ucanaccess://servername/etc/MyDB.accdb

驱动程序对本地不存在的此路径进行本地文件访问。 您所期望的是,驱动程序会与您的服务器建立 SMB/CIFS 连接,而他却做不到!

您必须将操作系统上的 SMB/CIFS 共享映射到本地驱动器号。因为那时操作系统正在为您处理网络 SMB/CIFS 的东西。并且 JDBC 驱动程序可以像访问本地文件一样访问该文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-02
    • 2012-03-22
    • 1970-01-01
    • 2013-04-15
    • 1970-01-01
    • 2015-10-19
    • 1970-01-01
    • 2022-10-05
    相关资源
    最近更新 更多