2

have problem with Firebird. I have never work with DB. DB on server firebird 1.5.

  1. Add lib: firebird-full-2.2.4 to libs folder

  2. Add this to Gradle: implementation fileTree('libs')

  3. Add this to MainActivity:

    Class.forName("org.firebirdsql.jdbc.FBDriver")
    
    val connection = DriverManager.getConnection(
    "jdbc:firebirdsql://jdbc:firebirdsql:193.###.###.13/3050:Scool",
    "###", "###")
    connection.close()
    
  4. After start I have this:

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

Mark Rotteveel
  • 100,966
  • 191
  • 140
  • 197
POMAIIIUK
  • 439
  • 4
  • 19
  • 1
    As you are using JDBC on Android please read: [JDBC vs Web Service for Android](https://stackoverflow.com/q/15853367/295004) – Morrison Chang Jul 14 '19 at 15:15
  • If you have a `firebird-full-2.2.4.jar`, it could be a jar from a questionable source, because the normal distribution calls it `jaybird-full-2.2.4.jar`. – Mark Rotteveel Jul 15 '19 at 09:51

1 Answers1

4

Jaybird, the Firebird JDBC driver, does not work on Android. There is an Android port of Jaybird, but it is not maintained by the Jaybird team.

The error itself indicates a problem with loading the connector-api because of missing JNDI classes like javax.naming.Referenceable in Android. This would indicate that you are trying to use the normal Jaybird and not the Android port of Jaybird.

Try and replace your Jaybird dependency with one from the Android port.

Be aware though that in general you should not use JDBC drivers to connect to a database from Android. See also JDBC vs Web Service for Android.

Mark Rotteveel
  • 100,966
  • 191
  • 140
  • 197
  • "replace your Jaybird dependency with one from the Android port." crash: Execution failed for task ':app:desugarDebugFileDependencies'. > A failure occurred while executing com.android.build.gradle.internal.tasks.Workers$ActionFacade > Error while dexing. – Acauã Pitta Apr 02 '20 at 07:44
  • 1
    @AcauãPitta I'm not involved with the Android port, nor do I develop on Android, so I can't help you with that (btw a build failure is not a crash). But I repeat my advice: don't use JDBC drivers from Android, use a REST service to mediate between your application and the database. – Mark Rotteveel Apr 02 '20 at 08:32