Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Java + Firebird Embedded + JayBird первое подключ.


Автор: denixx 18.8.2011, 17:37
Я тут надумал перевести мой учебный проект с MySQL на встраиваемую СУБД, которая умеет работать с хранимыми процедурами. Firebird Embedded вроде такое умеет. 
Но никак не разберусь, что от меня требует JayBird  
Учебный проект разрабатывался в IDE Eclipse. 
ОС Win 7 x64. 
Папка проекта для тестового запуска (создание соединения с БД) находится в D:\Java\Projects\FirebirdEmbedded. 

Привожу текст тестового подключения

Код

package test;

import java.sql.*;

public class Main {

    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        Class.forName("org.firebirdsql.jdbc.FBDriver");

        Connection bd = DriverManager.getConnection("jdbc:firebirdsql:embedded:database.fdb");
        Statement st = bd.createStatement();
        st.execute("create table if not exists 'TABLE1' ('name1' int, 'name2' text, 'name3' text);");
        st.execute("insert into 'TABLE1' ('name1', 'name2', 'name3') values (1, 'name1', 'name2'); ");
        st.execute("insert into 'TABLE1' ('name1', 'name2', 'name3') values (2, 'name3', 'name4'); ");
        st.execute("insert into 'TABLE1' ('name1', 'name2', 'name3') values (3, 'name5', 'name6');");
        ResultSet rs = st.executeQuery("select * from TABLE1");
        while (rs.next())
            {
                System.out.print  (rs.getString(1)+" ");
                System.out.print  (rs.getString(2)+" ");
                System.out.println(rs.getString(3));
            }
    }
}


При запуске выводит эксепшн: 
Exception in thread "main" java.lang.UnsatisfiedLinkError: D:\Java\Projects\FirebirdEmbedded\jaybird21.dll: Can't find dependent libraries 
at java.lang.ClassLoader$NativeLibrary.load(Native Method) 
at java.lang.ClassLoader.loadLibrary0(Unknown Source) 
at java.lang.ClassLoader.loadLibrary(Unknown Source) 
at java.lang.Runtime.loadLibrary0(Unknown Source) 
at java.lang.System.loadLibrary(Unknown Source) 
at org.firebirdsql.gds.impl.jni.JniGDSImpl.initJNIBridge(JniGDSImpl.java:5 
at org.firebirdsql.gds.impl.jni.JniGDSImpl.<clinit>(JniGDSImpl.java:23) 
at org.firebirdsql.gds.impl.jni.EmbeddedGDSFactoryPlugin.getGDS(EmbeddedGDSFactoryPlugin.java:40) 
at org.firebirdsql.gds.impl.GDSFactory.getGDSForType(GDSFactory.java:219) 
at org.firebirdsql.jca.FBManagedConnectionFactory.getGDS(FBManagedConnectionFactory.java:117) 
at org.firebirdsql.jdbc.FBDriver.connect(FBDriver.java:125) 
at java.sql.DriverManager.getConnection(Unknown Source) 
at java.sql.DriverManager.getConnection(Unknown Source) 
at test.Main.main(Main.java:16) 

Что я делал: 
Скопировал всё содержимое папки D:\Downloads\Firebird-2.5.0.26074-0_Win32_embed в папку D:\Java\Projects\FirebirdEmbedded. 
Скопировал всё содержимое папки D:\Downloads\Jaybird-2.1.6JDK_1.6 в папку D:\Java\Projects\FirebirdEmbedded. 
Создал глобальную переменную "FIREBIRD" с содержимым "D:\Java\Projects\FirebirdEmbedded". 
Добавил в глобальную переменную "PATH" текст ";D:\Java\Projects\FirebirdEmbedded". 

Кто может помочь?

Автор: LSD 19.8.2011, 14:01
Скачай http://www.dependencywalker.com/ натрави его на jaybird21.dll и посмотри каких зависимостей не хватает.

Автор: denixx 19.8.2011, 21:55
Спасибо за совет.
Посмотрел, добавил msvcr71.dll в папку с проектом.
Всё равно не запускается.

Перенёс всё это добро с Win7 x64 в виртуальную машину на Win XP x32.
Вроде заработало.
Буду выяснять, почему в одной системе не работает, а в другой работает.

Поддержка конечно у Firebird та ещё )
Одна русскоязычная группа в гуглгруппах и группы на YahooGroups.

Автор: LSD 22.8.2011, 10:58
А JVM и драйвер используется 64-х или 32-х битные?

Автор: denixx 22.8.2011, 11:09
Уже всё разрешилось smile

Для тех, кому интересно:
http://tech.groups.yahoo.com/group/Firebird-Java/message/10464
Там всё описание проблемы и ответы на вопросы.

Вкратце, что было не так:
Я использую 64-битную JVM, поэтому и драйвер JayBird мне нужен был с поддержкой x64 архитектуры.
Мне пришлось скомпилировать из исходников ещё не вышедший jaybird-full-2.2.0.jar, подключить библиотеку jaybird22_x64.dll, и ещё добавить в classpath antlr-runtime-3.0.1.jar (который я нашёл просто в гугле).

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)