Как настроить Embedded Firebird и получить доступ из Java-приложения?

У меня есть файл БД Firebird, test.fdb в каком-то каталоге, я хочу получить доступ к БД из java-приложения. Какие нужны файлы библиотек для доступа.

Я использую Jaybird JDBC Driver для доступа к встроенной базе данных Firebird, но получаю сообщение об ошибке

Исключение в потоке «основной» java.lang.UnsatisfiedLinkError: нет jaybird22_x64 в java.library.path

Я попытался загрузить и добавить файл jaybird22_x64.so с помощью System.setProperty("java.library.path", "/home/sk/Desktop/Jaybird/");, а также с помощью System.load() and -Djava.library.path.

Папка jaybird содержит файл jaybird22_x64.so.

Я использую Ubuntu 17.04 с kernel 4.10.0-42-generic

Вот исключение, которое я получаю.

Исключение в потоке «основной» java.lang.UnsatisfiedLinkError: нет jaybird22_x64 в java.library.path в java.lang.ClassLoader.loadLibrary(ClassLoader.java:1867) в java.lang.Runtime.loadLibrary0(Runtime.java:870) в java.lang.System.loadLibrary(System.java:1122) в org.firebirdsql.gds.impl.jni.JniGDSImpl.initJNIBridge(JniGDSImpl.java:64) в org.firebirdsql.gds.impl.jni.JniGDSImpl.( JniGDSImpl.java:25) в org.firebirdsql.gds.impl.jni.EmbeddedGDSFactoryPlugin.getGDS(EmbeddedGDSFactoryPlugin.java:40) в org.firebirdsql.gds.impl.GDSFactory.getGDSForType(GDSFactory.java:275) в org.firebirdsql .jca.FBManagedConnectionFactory.getGDS(FBManagedConnectionFactory.java:123) в org.firebirdsql.jdbc.AbstractDriver.connect(AbstractDriver.java:130) в java.sql.DriverManager.getConnection(DriverManager.java:664) в java.sql. DriverManager.getConnection(DriverManager.java:247) в test.TestJavaFireBird.main(TestJavaFireBird.java:33)

Кто может помочь, какие библиотеки нужны и как их загрузить?


person koiralo    schedule 11.12.2017    source источник
comment
Укажите точные значения, которые вы использовали. java.library.path ожидает папку, содержащую .dll (или .so), а не путь к самому файлу.   -  person Mark Rotteveel    schedule 11.12.2017
comment
В любом случае было бы проще перейти на Jaybird 3 и следовать lawinegevaar.nl/firebird/jaybird_embedded_example. .html   -  person Mark Rotteveel    schedule 11.12.2017
comment
Я добавил файл jaybird22_x64.so с полным путем в java.library.path   -  person koiralo    schedule 11.12.2017
comment
Отредактируйте свой вопрос и покажите точное значение, потому что я не знаю, имеете ли вы в виду «полный путь» полный путь к папке, содержащей .so, или полный путь к файлу. Вы должны использовать первое, а не второе.   -  person Mark Rotteveel    schedule 11.12.2017
comment
Не могли бы вы указать, какую ОС и если Linux, то какую версию ядра вы используете? Не могли бы вы также включить полную трассировку стека исключения, а не только сообщение?   -  person Mark Rotteveel    schedule 11.12.2017
comment
@MarkRotteveel Я добавил сообщение об ошибке в вопрос   -  person koiralo    schedule 11.12.2017
comment
Я посмотрю, смогу ли я воспроизвести, а пока я предлагаю вам прочитать статью, которую я разместил во втором комментарии, и вместо этого переключиться на Jaybird 3.   -  person Mark Rotteveel    schedule 11.12.2017
comment
можно ли его использовать для линукса, я вижу только для винды   -  person koiralo    schedule 11.12.2017
comment
См. начало статьи, в нем говорится: Этот пример предназначен для Windows (64-разрядная версия), но его легко перевести на другие платформы (достаточно просто включить эквивалентные библиотеки в папку fb). В Другими словами, в Linux возьмите установку Firebird 3 и используйте Linux-эквиваленты перечисленных файлов (что обычно означает: используйте '.so' вместо '.dll'). Или, если вы хотите использовать Firebird 2.5 или более раннюю версию, эквивалентные файлы Firebird 2.x, необходимые для встраивания.   -  person Mark Rotteveel    schedule 11.12.2017
comment
Я все еще получаю сообщение об ошибке Исключение в потоке main java.lang.RuntimeException: Не удалось инициализировать собственную библиотеку Jaybird. Скорее всего, это связано с тем, что не удалось загрузить клиентскую библиотеку firebird.   -  person koiralo    schedule 11.12.2017
comment
Это предполагает, что у вас нет клиента Firebird на пути поиска.   -  person Mark Rotteveel    schedule 11.12.2017
comment
Давайте продолжим обсуждение в чате.   -  person koiralo    schedule 11.12.2017


Ответы (1)


Похоже, что бинарники с сайта Firebird не работают в Ubuntu. Таким образом, чтобы использовать Firebird, встроенный в Ubuntu 17.04, проще всего установить сервер Firebird 3.0, используя:

sudo apt-get install firebird3.0-server

При установке обязательно введите пароль для учетной записи sysdba.

Это установит и запустит полноценный сервер Firebird 3.0, но в качестве альтернативы можно самостоятельно скомпилировать Firebird. Вы можете остановить и отключить серверный процесс, используя

sudo systemctl stop firebird3.0
sudo systemctl disable firebird3.0

Далее вам нужно будет добавить себя в группу Firebird, чтобы получить доступ к /tmp/firebird для общих файлов блокировки:

sudo usermod -a -G firebird <your-username>

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

После того, как это заработает, вы можете попытаться заставить его работать, не добавляя себя в группу firebird, указав путь блокировки с помощью переменной окружения FIREBIRD_LOCK.

Затем используйте Jaybird 3.0 и JNA 4.4.0 для запуска вашего Java-приложения. Если вы хотите использовать Jaybird 2.2, вам нужно самостоятельно скомпилировать libjaybird22_x64.so.

Если вам действительно нужно использовать Firebird 2.5, вы можете посмотреть https://askubuntu.com/questions/945327/how-to-installing-firebird-on-ubuntu-16-04 хотя я не уверен, что это будет работать 17.04.

person Mark Rotteveel    schedule 14.12.2017