【问题标题】:Firebird and Android JDBC DriverFirebird 和 Android JDBC 驱动程序
【发布时间】:2019-11-23 11:37:49
【问题描述】:

Firebird 有问题。我从未与 DB 合作过。服务器 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: 致命 例外:主要 进程:success.kneu,PID:12219 java.lang.NoClassDefFoundError:解析失败:Ljavax/resource/Referenceable; 在 java.lang.Class.classForName(本机方法) 在 java.lang.Class.forName(Class.java:400) 在 java.lang.Class.forName(Class.java:326) 在success.kneu.LoginActivity$onCreate$1.onClick(LoginActivity.kt:48) 在 android.view.View.performClick(View.java:5647) 在 android.view.View$PerformClick.run(View.java:22465) 在 android.os.Handler.handleCallback(Handler.java:754) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:163) 在 android.app.ActivityThread.main(ActivityThread.java:6238) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:933) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:823) 引起:java.lang.ClassNotFoundException:javax.resource.Referenceable 在 java.lang.VMClassLoader.findLoadedClass(本机方法) 在 java.lang.ClassLoader.findLoadedClass(ClassLoader.java:742) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:362) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:312) 在 java.lang.Class.classForName(本机方法) 在 java.lang.Class.forName(Class.java:400) 在 java.lang.Class.forName(Class.java:326) 在success.kneu.LoginActivity$onCreate$1.onClick(LoginActivity.kt:48) 在 android.view.View.performClick(View.java:5647) 在 android.view.View$PerformClick.run(View.java:22465) 在 android.os.Handler.handleCallback(Handler.java:754) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:163) 在 android.app.ActivityThread.main(ActivityThread.java:6238) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:933) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:823) 引起:java.lang.NoClassDefFoundError:解析失败:Ljavax/naming/Referenceable; 在 java.lang.Class.classForName(本机方法) 在 java.lang.Class.forName(Class.java:400) 在 java.lang.Class.forName(Class.java:326) 在success.kneu.LoginActivity$onCreate$1.onClick(LoginActivity.kt:48) 在 android.view.View.performClick(View.java:5647) 在 android.view.View$PerformClick.run(View.java:22465) 在 android.os.Handler.handleCallback(Handler.java:754) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:163) 在 android.app.ActivityThread.main(ActivityThread.java:6238) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:933) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:823) 原因:java.lang.ClassNotFoundException:在路径上找不到类“javax.naming.Referenceable”:DexPathList [[zip 文件 “/data/app/success.kneu-1/base.apk”,压缩文件 “/data/app/success.kneu-1/split_lib_dependencies_apk.apk”,压缩文件 “/data/app/success.kneu-1/split_lib_slice_0_apk.apk”,压缩文件 “/data/app/success.kneu-1/split_lib_slice_1_apk.apk”,压缩文件 “/data/app/success.kneu-1/split_lib_slice_2_apk.apk”,压缩文件 “/data/app/success.kneu-1/split_lib_slice_3_apk.apk”,压缩文件 “/data/app/success.kneu-1/split_lib_slice_4_apk.apk”,压缩文件 “/data/app/success.kneu-1/split_lib_slice_5_apk.apk”,压缩文件 “/data/app/success.kneu-1/split_lib_slice_6_apk.apk”,压缩文件 “/data/app/success.kneu-1/split_lib_slice_7_apk.apk”,压缩文件 “/data/app/success.kneu-1/split_lib_slice_8_apk.apk”,压缩文件 "/data/app/success.kneu-1/split_lib_slice_9_apk.apk"],nativeLibraryDirectories=[/data/app/success.kneu-1/lib/arm64, /system/lib64, /vendor/lib64]] 在 dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:380) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:312) 在 java.lang.Class.classForName(本机方法) 在 java.lang.Class.forName(Class.java:400) 在 java.lang.Class.forName(Class.java:326) 在success.kneu.LoginActivity$onCreate$1.onClick(LoginActivity.kt:48) 在 android.view.View.performClick(View.java:5647) 在 android.view.View$PerformClick.run(View.java:22465) 在 android.os.Handler.handleCallback(Handler.java:754) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:163) 在 android.app.ActivityThread.main(ActivityThread.java:6238) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:933) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:823) 2019-07-14 17:37:03.815 12219-12219/? I/Process:发送信号。 PID: 12219 SIG:9

【问题讨论】:

  • 当您在 Android 上使用 JDBC 时,请阅读:JDBC vs Web Service for Android
  • 如果你有一个firebird-full-2.2.4.jar,它可能是一个来源可疑的罐子,因为正态分布称它为jaybird-full-2.2.4.jar

标签: android kotlin firebird jaybird


【解决方案1】:

Firebird JDBC 驱动程序 Jaybird 不适用于 Android。有一个Android port of Jaybird,但它不是由 Jaybird 团队维护的。

该错误本身表明加载 connector-api 时出现问题,因为在 Android 中缺少像 javax.naming.Referenceable 这样的 JNDI 类。这表明您正在尝试使用普通的 Jaybird,而不是 Jaybird 的 Android 端口。

尝试将您的 Jaybird 依赖项替换为来自 Android 端口的依赖项。

请注意,一般情况下,您不应使用 JDBC 驱动程序从 Android 连接到数据库。另见JDBC vs Web Service for Android

【讨论】:

  • "将您的 Jaybird 依赖项替换为来自 Android 端口的依赖项。"崩溃:任务“:app:desugarDebugFileDependencies”执行失败。 > 执行 com.android.build.gradle.internal.tasks.Workers$ActionFacade 时发生故障 > dexing 时出错。
  • @AcauãPitta 我没有参与 Android 移植,也没有在 Android 上开发,所以我无法帮助您(顺便说一句,构建失败不是崩溃)。但我重复我的建议:不要使用 Android 的 JDBC 驱动程序,使用 REST 服务在您的应用程序和数据库之间进行调解。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-24
  • 1970-01-01
  • 2013-02-17
相关资源
最近更新 更多