Невозможно подключиться к базе данных на общем диске - 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 может обращаться к файлу так же, как к локальному файлу.