Использование Jaybird для подключения к базе данных Firebird, расположенной на компьютере в локальной сети

Я создаю java-приложение, которое подключается к базе данных Firebird и извлекает некоторые данные. Программа готова, и она хорошо работает на моем компьютере. Проблема в том, что на компьютере, который мне нужен для запуска приложения, база данных находится на другом компьютере в локальной сети, и я понятия не имею, какой путь я должен указать в строке подключения jaybird, чтобы запустить его. Поясню немного:

Мне нужно запустить мое приложение на компьютере X, но фактическая база данных находится не на диске в компьютере, а на компьютере в локальной сети. Что-то вроде этого (это пример, и он воспроизведен у меня дома, а не на самом сайте, который мне нужен, чтобы заставить его работать):

введите здесь описание изображения

Итак, путь, который он дает мне для базы данных, выглядит примерно так:

введите здесь описание изображения

Я знаю, что если моя база данных находится на моем диске (например, в C:\Users\john\Desktop), мое подключение к базе данных с помощью Jaybird должно быть примерно таким:

static final String FB_DB_URL = "jdbc:firebirdsql://localhost:3050/C:\\Users\\john\\Desktop\\TEST1.FDB";

FB_connection = DriverManager.getConnection( FB_DB_URL , FB_USER , FB_PASS);

Собственно, именно так мне удалось заставить его работать на моем компьютере. Но в этом случае я понятия не имею, каким должен быть путь. Я пробовал что-то вроде:

    static final String FB_DB_URL =  "jdbc:firebirdsql://192.168.0.101:3050/\\\\DESKTOP-1UFA09I\\Documents\\TEST1.FDB"; 

Где «192.168.0.101» — это IPv4-адрес компьютера, на котором находится база данных. Но это дало мне исключение, говорящее, что приложению не удалось найти базу данных. Я думаю, что это самое близкое, что я должен был найти решение, но мне не повезло. Некоторая дополнительная информация:

  • На обоих компьютерах был отключен брандмауэр, и они могли посылать ping друг другу, так что они, по сути, подключены.

  • Я использую Firebird 2.5 и Jaybird 2.2.1.

  • Я также пробовал следующее без везения:

    static final String FB_DB_URL =  "jdbc:firebirdsql://192.168.0.101:3050/C:\\users\\john2\\Documents\\TEST1.FDB"; 
    
  • Папка является общей (по крайней мере, я так думаю), потому что я могу получить к ней доступ через Windows, а файл базы данных дает всем права на чтение/запись.

  • Я уверен, что Firebird работает на обоих компьютерах.

Любая помощь в этом вопросе будет принята с благодарностью. Я уверен, что проблема в пути, потому что, как я уже сказал, приложение хорошо работает с базой данных на моем компьютере. Кроме того, если бы вы могли дать мне решение, которое не требует IP-адреса компьютера, на котором хранится БД, это было бы здорово, но я думаю, что все равно смогу получить эту информацию.

ИЗМЕНИТЬ

В целях документирования решение проблемы было следующим:

правильный способ сделать путь к базе данных:

"jdbc:firebirdsql://192.168.0.101:3050/C:\\folder1\\folder2\\TEST1.FDB";

исключение произошло из-за того, что у jaybird, по-видимому, есть проблемы с правами доступа к папке users на сервере. Поскольку моя БД находилась в папке documents, это вызывало некоторые проблемы, когда jaybird пытался получить к ней доступ. решение состоит в том, чтобы переместить БД в другую папку в C://


person angel208    schedule 31.08.2016    source источник


Ответы (2)


Для подключения к удаленной базе данных вам необходимо знать следующее:

  • Имя хоста или IP-адрес сервера Firebird.
  • Номер порта сервера Firebird (по умолчанию 3050)
  • Имя пользователя и пароль
  • Псевдоним базы данных или полный путь к базе данных

Вы, кажется, рассмотрели первые три пункта, поэтому проблема с четвертым. Вы думаете, что база данных находится в C:\users\john2\Documents\TEST1.FDB. Если это так, то URL-адрес JDBC:

jdbc:firebirdsql://192.168.0.101:3050/C:\\users\\john2\\Documents\\TEST1.FDB

Однако пользователь, запускающий серверный процесс Firebird, по умолчанию не имеет нет доступа к пользовательским папкам из соображений безопасности.

Я предлагаю вам переместить базу данных в место за пределами пользовательской папки и убедиться, что учетная запись, на которой запущена служба сервера Firebird, имеет доступ для чтения и записи (СЕТЬ СЛУЖБА или ЛОКАЛЬНАЯ СИСТЕМА, я забыл, что и в настоящее время у меня нет доступа к Windows-машина).

Другие примечания:

  • Местоположение базы данных Firebird не должно быть общим, поскольку удаленный доступ к базе данных должен осуществляться через сервер Firebird.
  • Вам действительно следует обновиться до Jaybird 2.2.11; 2.2.1 уже почти 4 года и с тех пор многое было исправлено
  • Если вы действительно используете Firebird 2.5(.0), обновитесь до 2.5.6 или подумайте об обновлении до 3.0.
person Mark Rotteveel    schedule 01.09.2016
comment
большое спасибо. на самом деле проблема заключалась в том, что БД находилась в папке «Пользователи». - person angel208; 02.09.2016

Похоже, вы хотите подключиться к серверу Firebird в режиме клиент/сервер и передать ему имя файла базы данных. Часть «хост: порт» подключается к серверу, за следующим «/» следует имя файла базы данных.

Если вы используете 192.168.0.101:3050, вы должны убедиться, что сервер работает на другом компьютере с IP-адресом 192.168.0.101. Поскольку сервер уже находится на другом компьютере, вам нужно указать локальное имя имени базы данных на этом компьютере, как в

static final String FB_DB_URL =  "jdbc:firebirdsql://192.168.0.101:3050/C:\\users\\john2\\Documents\\TEST1.FDB"; 

Чтобы не использовать IP-адрес, вам нужно дать этой машине имя, которое может быть разрешено DNS в локальной сети, что несложно, записи в имени hosts будет достаточно. Порт 3050 на самом деле является портом по умолчанию, поэтому его можно не указывать.

Поскольку это не работает, я предполагаю, что сервер не работает на целевой машине, там есть только файл базы данных. В этом случае вы должны подключиться к вашему локальному серверу, но сообщить ему доступное по сети имя файла базы данных, как в

static final String FB_DB_URL =  "jdbc:firebirdsql://localhost/\\\\DESKTOP-1UFA09I\\Documents\\TEST1.FDB"; 

Это должно позволить локальному серверу Firebird открывать файл \\DESKTOP-1UFA09I\Documents\TEST1.FDB по локальной сети - конечно, если сетевая папка DESKTOP-1UFA09I указывает на правильное расположение и учетную запись, под которой локальный сервер Firebird имеет достаточные права доступа на другом компьютере.

person Tomasz Stanczak    schedule 01.09.2016
comment
Использование \\DESKTOP-1UFA09I\Documents\TEST1.FDB не сработает, потому что Firebird не будет открывать базы данных через сетевой ресурс, только через локальный диск. И если бы в целевой службе не было запущенной базы данных, это привело бы к другой ошибке. - person Mark Rotteveel; 01.09.2016
comment
Ответ был правильным, но в итоге проблема была в фактическом расположении БД. это было в папке пользователей сервера, и, по-видимому, у jaybird нет прав доступа к этой папке - person angel208; 02.09.2016
comment
@ angel208 Jaybird — это просто библиотека, которая взаимодействует с сервером Firebird; это был сервер Firebird, у которого не было разрешения. - person Mark Rotteveel; 02.09.2016