Драйвер Firebird и Android JDBC

проблема с Firebird. Я никогда не работал с БД. БД на сервере firebird 1.5.

  1. Добавить lib: firebird-full-2.2.4 в папку libs

  2. Добавьте это в Gradle: implementation fileTree('libs')

  3. Добавьте это в MainActivity:

    Class.forName("org.firebirdsql.jdbc.FBDriver")
    
    val connection = DriverManager.getConnection(
    "jdbc:firebirdsql://jdbc:firebirdsql:193.###.###.13/3050:Scool",
    "###", "###")
    connection.close()
    
  4. После запуска у меня это:

E/AndroidRuntime: FATAL EXCEPTION: main Process: success.kneu, PID: 12219 java.lang.NoClassDefFoundError: Failed resolution of: Ljavax/resource/Referenceable; at java.lang.Class.classForName(Native Method) at java.lang.Class.forName(Class.java:400) at java.lang.Class.forName(Class.java:326) at success.kneu.LoginActivity$onCreate$1.onClick(LoginActivity.kt:48) at android.view.View.performClick(View.java:5647) at android.view.View$PerformClick.run(View.java:22465) at android.os.Handler.handleCallback(Handler.java:754) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:163) at android.app.ActivityThread.main(ActivityThread.java:6238) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:933) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:823) Caused by: java.lang.ClassNotFoundException: javax.resource.Referenceable at java.lang.VMClassLoader.findLoadedClass(Native Method) at java.lang.ClassLoader.findLoadedClass(ClassLoader.java:742) at java.lang.ClassLoader.loadClass(ClassLoader.java:362) at java.lang.ClassLoader.loadClass(ClassLoader.java:312) at java.lang.Class.classForName(Native Method)  at java.lang.Class.forName(Class.java:400)  at java.lang.Class.forName(Class.java:326)  at success.kneu.LoginActivity$onCreate$1.onClick(LoginActivity.kt:48)  at android.view.View.performClick(View.java:5647)  at android.view.View$PerformClick.run(View.java:22465)  at android.os.Handler.handleCallback(Handler.java:754)  at android.os.Handler.dispatchMessage(Handler.java:95)  at android.os.Looper.loop(Looper.java:163)  at android.app.ActivityThread.main(ActivityThread.java:6238)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:933)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:823)  Caused by: java.lang.NoClassDefFoundError: Failed resolution of: Ljavax/naming/Referenceable; at java.lang.Class.classForName(Native Method)  at java.lang.Class.forName(Class.java:400)  at java.lang.Class.forName(Class.java:326)  at success.kneu.LoginActivity$onCreate$1.onClick(LoginActivity.kt:48)  at android.view.View.performClick(View.java:5647)  at android.view.View$PerformClick.run(View.java:22465)  at android.os.Handler.handleCallback(Handler.java:754)  at android.os.Handler.dispatchMessage(Handler.java:95)  at android.os.Looper.loop(Looper.java:163)  at android.app.ActivityThread.main(ActivityThread.java:6238)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:933)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:823)  Caused by: java.lang.ClassNotFoundException: Didn't find class "javax.naming.Referenceable" on path: DexPathList[[zip file "/data/app/success.kneu-1/base.apk", zip file "/data/app/success.kneu-1/split_lib_dependencies_apk.apk", zip file "/data/app/success.kneu-1/split_lib_slice_0_apk.apk", zip file "/data/app/success.kneu-1/split_lib_slice_1_apk.apk", zip file "/data/app/success.kneu-1/split_lib_slice_2_apk.apk", zip file "/data/app/success.kneu-1/split_lib_slice_3_apk.apk", zip file "/data/app/success.kneu-1/split_lib_slice_4_apk.apk", zip file "/data/app/success.kneu-1/split_lib_slice_5_apk.apk", zip file "/data/app/success.kneu-1/split_lib_slice_6_apk.apk", zip file "/data/app/success.kneu-1/split_lib_slice_7_apk.apk", zip file "/data/app/success.kneu-1/split_lib_slice_8_apk.apk", zip file "/data/app/success.kneu-1/split_lib_slice_9_apk.apk"],nativeLibraryDirectories=[/data/app/success.kneu-1/lib/arm64, /system/lib64, /vendor/lib64]] at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56) at java.lang.ClassLoader.loadClass(ClassLoader.java:380) at java.lang.ClassLoader.loadClass(ClassLoader.java:312) at java.lang.Class.classForName(Native Method)  at java.lang.Class.forName(Class.java:400)  at java.lang.Class.forName(Class.java:326)  at success.kneu.LoginActivity$onCreate$1.onClick(LoginActivity.kt:48)  at android.view.View.performClick(View.java:5647)  at android.view.View$PerformClick.run(View.java:22465)  at android.os.Handler.handleCallback(Handler.java:754)  at android.os.Handler.dispatchMessage(Handler.java:95)  at android.os.Looper.loop(Looper.java:163)  at android.app.ActivityThread.main(ActivityThread.java:6238)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:933)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:823)  2019-07-14 17:37:03.815 12219-12219/? I/Process: Sending signal. PID: 12219 SIG: 9

Поскольку вы используете JDBC на Android, прочтите: JDBC против веб-службы для Android

Morrison Chang 14.07.2019 17:15

Если у вас есть firebird-full-2.2.4.jar, это может быть банка из сомнительного источника, потому что нормальное распределение называет это jaybird-full-2.2.4.jar.

Mark Rotteveel 15.07.2019 11:51
2
2
608
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Jaybird, JDBC-драйвер Firebird, не работает на Android. Существует Android-порт Jaybird, но команда Jaybird не поддерживает его.

Сама ошибка указывает на проблему с загрузкой connector-api из-за отсутствия классов JNDI, таких как javax.naming.Referenceable в Android. Это будет означать, что вы пытаетесь использовать обычный Jaybird, а не версию Jaybird для Android.

Попробуйте заменить свою зависимость Jaybird на версию из порта Android.

Имейте в виду, что в целом вам не следует использовать драйверы JDBC для подключения к базе данных с Android. См. также JDBC против веб-службы для Android.

«замените свою зависимость Jaybird на одну из порта Android». сбой: не удалось выполнить задачу ':app:desugarDebugFileDependencies'. > Произошел сбой при выполнении com.android.build.gradle.internal.tasks.Workers$ActionFacade > Ошибка при индексировании.

Acauã Pitta 02.04.2020 09:44

@AcauãPitta Я не участвую в переносе Android и не занимаюсь разработкой для Android, поэтому не могу вам с этим помочь (кстати, сбой сборки не является сбоем). Но я повторяю свой совет: не используйте драйверы JDBC из Android, используйте службу REST в качестве посредника между вашим приложением и базой данных.

Mark Rotteveel 02.04.2020 10:32

Другие вопросы по теме