2016-05-28 3 views
1

Подключение к Firebird базе данных:Ошибка java.lang.NoClassDefFoundError: org.firebirdsql.jdbc.FBDataSource на Android

Когда я пытаюсь соединить мой андроид приложение для Firebird базе данных я получил следующие ошибки.

Мой LogCat:

FATAL EXCEPTION : main Process: com.example.hms.firebirdconnection, PID: 26717 java.lang.NoClassDefFoundError: org.firebirdsql.jdbc.FBDataSource at org.firebirdsql.jdbc.AbstractDriver.createDataSource(AbstractDriver.java:138) at org.firebirdsql.jdbc.AbstractDriver.connect(AbstractDriver.java:124) at java.sql.DriverManager.getConnection(DriverManager.java:179) at java.sql.DriverManager.getConnection(DriverManager.java:213) at com.example.hms.firebirdconnection.MainActivity$1.onClick(MainActivity.java:42) at android.view.View.performClick(View.java:4780) at android.view.View$PerformClick.run(View.java:19866) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5254) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)

Я использую JayBird-полный-2.2.3 и добавить зависимость в качестве модуля зависимости.

Мой код:

b.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      try { 

       Class.forName("org.firebirdsql.jdbc.FBDriver"); 
      } catch (Exception e) { 
       e.printStackTrace(); 
       System.err.println(e.getMessage()); 
      } 
      try { 



       Connection connection DriverManager.getConnection("jdbc:firebirdsql://xxx.xxx.x.x:3050//C:/User/DBNAME", "username", "password"); 

       String sSql="selecta.TDID,a.DOCTORNAME,a.ROOMNAME,a.TOKEN from TOKEN_DISPLAY a where a.EMPID=2"; 
       Statement stmt = connection.createStatement(); 
       ResultSet rs = stmt.executeQuery(sSql); 
       String dr = ""; 
       if (rs.next()) { 
        dr = rs.getString("DOCTORNAME"); 
       } 
       System.out.println("drrrrrrrrrrr=" + dr); 
       ); 
       rs.close(); 
      } catch (SQLException e1) { 
       e1.printStackTrace(); 
       return; 
      } 
      return; 
     } 


    }); 

Gradle:

применить плагин: '' com.android.application

андроида { compileSdkVersion 23 buildToolsVersion "23.0.3"

defaultConfig { 
    applicationId "com.example.hms.firebirdconnection" 
    minSdkVersion 15 
    targetSdkVersion 23 
    versionCode 1 
    versionName "1.0" 
    multiDexEnabled true 
} 


buildTypes { 
    release { 
     minifyEnabled false 
     proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro' 
      } 
     } 
} 

dependencies { 
    compile fileTree(include: ['*.jar'], dir: 'libs') 
    testCompile 'junit:junit:4.12' 
    compile 'com.android.support:appcompat-v7:23.3.0' 
    compile files('libs/jaybird-full-2.2.10.jar') 
} 

ответ

0

Кажется, вы еще не добавили t он jar файл после того, как вы добавите зависимость от модуля, перейдите к представлению проекта и скопируйте файл jar в папку lib, он будет разрешать вызовы метода, тогда

+0

Я добавил jar в папку lib, но я получил ошибки, такие как Ошибка: Выполнение не выполнено для задачи ': app: transformClassesWithJarMergingForDebug'. > com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicate entry: org/firebirdsql/ds/AbstractPooledConnection.class – user6313452

+0

затем попробуйте удалить зависимость модуля, перейдите в настройки модуля, щелкнув правой кнопкой мыши на проект, потому что его уже присутствует в папке lib, существует конфликт при доступе к –

+0

Запустите «gradlew dependencies», который позволит вам увидеть все библиотеки. Вы можете использовать директиву «исключить» для удаления дубликатов библиотек. https://gradle.org/docs/current/userguide/dependency_management.html#sub:exclude_transitive_dependencies –

1

В сообщении об ошибке указано java.lang.NoClassDefFoundError: org.firebirdsql.jdbc.FBDataSource. У вас нет этого конкретного класса в вашей библиотеке. Пожалуйста, скачайте драйвер с https://github.com/FirebirdSQL/jaybird/releases/download/v2.2.10/Jaybird-2.2.10-JDK_1.8.zip и посмотрите результат.

+0

Обычный драйвер Jaybird не может использоваться на Android. –

0

Похоже, вы используете обычный Jaybird (для Java). Jaybird нельзя использовать на Android, потому что это зависит от некоторых интерфейсов и классов, которые недоступны на Android.

Вам необходимо использовать "Android Firebird JDBC Driver port", который является портом Jaybird специально для Android. К сожалению, разработчик этого проекта не обновил его с Jaybird 2.2.4.

+0

Благодарю вас, сэр за ваше предложение. Эта проблема исправлена, но теперь я получил эти ошибки. Java.lang.ExceptionInInitializerError и java.lang.NullPointerException: – user6313452

+0

Предлагаю вам задать новый вопрос, хотя я не уверен, могу ли я помочь. Я поддерживаю обычную версию Jaybird и почти ничего не знаю об особенностях версии Android, хотя, я считаю, вы можете столкнуться с проблемами, если не включили в свой проект активы. –