Невозможно подключиться к базе данных на общем диске - UCanAccess

Я настроил свое приложение для подключения к базе данных Access через UCanAccess, однако я не могу подключиться к базе данных, расположенной на общем диске. Смотрите ниже примеры.

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

Можно ли обойти это? У моих пользователей есть права доступа к папке, но я не хочу отображать диски на каждом компьютере. Спасибо

2 ответа

Решение

У вас просто недостаточно косой черты в URL-адресе соединения для представления пути UNC. Как вы заметили, для локального подключения к C:\Desktop\MyDB.accdb ты можешь использовать

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

Аналогично, для подключения UNC к \\servername\etc\MyDB.accdb ты можешь использовать

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

Драйвер базы данных может обрабатывать только указанные им протоколлы. Большинство драйверов jdbc могут обрабатывать сетевой протокол только для своего конкретного сервера базы данных.

Вы используете драйвер доступа jdbc, который может обрабатывать доступ только к данному файлу accdb.

Когда вы пытаетесь URL-адрес, как:

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

Драйвер создает локальный доступ к файлу по этому пути, который не существует локально. Вы ожидаете, что драйвер создаст соединение SMB / CIFS с вашим сервером, чего он не может!

Вы должны сопоставить общий ресурс SMB / CIFS в вашей ОС с буквой локального диска. Потому что тогда операционная система обрабатывает сетевой SMB / CIFS для вас. И драйвер JDBC может обращаться к файлу так же, как к локальному файлу.

Другие вопросы по тегам