2016-08-31 2 views
2

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

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

enter image description here

Так путь, который он дает мне для базы данных что-то вроде:

enter image description here

Я знаю, что если моя база данных находится в моем диске (например, в C: \ Users \ джон \ 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 адрес компьютера, на котором находится БД. Но это дало мне исключение, заявив, что приложение не может найти базу данных. Я думаю, что это самое ближайшее, чтобы найти решение, но мне не повезло. Некоторые дополнительная информация:

  • Оба компьютера были брандмауэр выключен, и может послать пинг друг к другу, так что они, по сути, связаны между собой.

  • Я использую 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"; 
    
  • Папка совместно (или, по крайней мере, это то, что я думаю), потому что я могу получить к нему доступ через окна, и файл базы данных дает разрешения на чтение/запись всем.

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

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

EDIT

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

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

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

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

ответ

4

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

  • Имя хоста или 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, имеет доступ на чтение и запись (NETWORK SERVICE или LOCAL SYSTEM, я забыл, t иметь доступ к машине Windows).

Других ноты:

  • Местонахождение в Firebird базы данных должны не быть разделены, потому что доступ к базе данных удаленно должны быть сделаны через Firebird сервер
  • Вы должны действительно обновить до JayBird 2.2.11; 2.2.1 почти 4 лет, и много было исправлено, так как
  • Если вы действительно используете Firebird 2.5 (+0,0), а затем перейти на 2.5.6, или рассмотреть вопрос о повышении до 3,0
+0

большое спасибо. проблема была, infact, когда БД находилось в папке «Пользователи». – angel208

1

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

Если вы используете 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 имеет достаточные права доступа на другом компьютере.

+0

Использование '\\ DESKTOP-1UFA09I \ Documents \ TEST1.FDB' не будет работать, поскольку Firebird не будет открывать базы данных через сетевой ресурс только через локальный диск. И если в целевой службе не было базы данных, это привело бы к другой ошибке. –

+0

Ответ был верным, но в конце проблема была в фактическом расположении БД. он был в папке пользователей на сервере, и, видимо, у jaybird нет разрешений на доступ к этой папке – angel208

+0

@ angel208 Jaybird - это просто библиотека, которая разговаривает с сервером Firebird; это был сервер Firebird, у которого не было разрешения. –