2015-08-04 2 views
2

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

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

+0

При попытке // имя_сервера драйвер JDBC имеет для обработки протокола smb/cifs вашего файлового сервера, который он не может. Для работы с сетевой частью ресурса вам потребуется ОС. После того, как общий ресурс сопоставляется с буквой диска, jdbc пытается получить к нему доступ, как локальный файл, а ваш os обрабатывает smb/cifs. thats all –

ответ

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"; 
+0

Он работал как шарм. У меня было своеобразное ощущение, что это было нечто тривиальное, как косая черта. Спасибо Горду, который решил проблему. – Wizard

0

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

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

При попытке к URL, как:

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

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

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

Смежные вопросы