【问题标题】:Importing JDBC into Android Studio errors将 JDBC 导入 Android Studio 错误
【发布时间】:2016-08-13 13:34:33
【问题描述】:

我目前正在开发一个 Android 应用程序,并且正在尝试从 MySQL 数据库中检索信息。我正在尝试按照教授的指示使用 JDBC,但我一直遇到问题。

我已经安装了 MySQL Connector/ODBC 5.3,为我尝试使用的驱动程序设置了一个 CLASSPATH 环境变量,即“mysql-connector-java-5.1.38-bin.jar”,然后我尝试导入将该 JAR 放入我的项目中。

我尝试通过两种方式导入 JAR,分别是:

文件 > 新建模块 > 导入 .JAR/.AAR 包 > 导入 mysql 连接器 JAR 然后我继续转到文件>项目结构>应用程序>依赖项>添加模块依赖项

我尝试执行此操作的另一种方法是将 JAR 添加到我的项目的“libs”文件夹中,然后按照项目结构路径从文件中添加依赖项。

我正在运行最新版本的 Android Studio 2.0

在执行任一导入步骤时构建成功完成,但是在尝试运行应用程序时出现以下错误:

    Execution failed for task ':app:transformClassesWithInstantRunForDebug'.
    > JSR/RET are not supported with computeFrames option

我发现与此相关的唯一解决方案是转到 Android Studio 设置并关闭即时运行选项。

这样做后,我收到了以下错误:

    Execution failed for task ':app:transformClassesWithDexForDebug'.
    > com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException:  java.util.concurrent.ExecutionException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'C:\Program Files\Java\jdk1.8.0_77\bin\java.exe'' finished with non-zero exit value 1

以下是我的build.gradle(Module:app):

  apply plugin: 'com.android.application'

  android {
compileSdkVersion 23
buildToolsVersion '23.0.3'

defaultConfig {
    applicationId "com.example.JohnDoe.myapp"  //This is not actually the name or the name of the app on there but I changed this for privacy.
    minSdkVersion 14
    targetSdkVersion 23
    versionCode 1
    versionName "1.0"
    multiDexEnabled true

}

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

dexOptions {
    incremental true
    javaMaxHeapSize "2048M"
    jumboMode = true
}
  }

  dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.1.1'
compile 'com.android.support:design:23.2.1'
compile 'com.squareup.retrofit2:retrofit:2.0.0'
compile 'com.squareup.retrofit2:converter-gson:2.0.0'
compile 'com.squareup.okhttp3:logging-interceptor:3.2.0'
compile 'com.android.support:multidex:1.0.1'
compile project(':mysql-connector-java-5.1.38-bin')
  }

以下是关闭“即时运行”后整个 gradle 控制台输出的链接:pastebin.com/5kj6Cgeb

请告诉我从这里去哪里让 JDBC 驱动程序正常工作,这样我才能完成这个项目。感谢您的宝贵时间。

更新 1:显然最新的 JDBC 驱动程序与 Android 不完全兼容并导致问题。我安装并导入了以前的版本(5.0.8),到目前为止,该应用程序至少可以运行。现在将尝试实现驱动程序并实际使用它进行开发,届时我将发布另一个关于结果的更新。

【问题讨论】:

  • 你会提供 gradle 控制台输出吗?
  • 我提供的错误来自 gradle 控制台。我应该在整个输出中添加评论吗?
  • 一个 gist 或 pastebin 会更适合这么多的文字,你也可以编辑你的问题。
  • 以下是关闭“即时运行”后整个 gradle 控制台输出的链接:pastebin.com/5kj6Cgeb
  • 参考this question

标签: java android mysql jdbc


【解决方案1】:

您不应该在 Android 应用程序中使用 JDBC,因为它的目标是与数据库服务器的高带宽、可靠连接,而您在移动设备上无法实现这一点。尝试将数据库封装在 REST Web 服务中。

我多次读到人们在 Android 中使用 JDBC 时遇到了困难,它只是不是为在 Android 生态系统中使用而构建的。并非每个库都与 Android 完全兼容,您的 gradle 输出表明“dexer”无法将 jar 文件转换为 .dex。

您提供的 gradle 输出显示以下错误:

com.android.dx.cf.iface.ParseException: bad class file magic (cafebabe) or version (0034.0000)

请参阅this question 了解可能的解决方案。确保您使用正确的 Java SDK 进行构建。

【讨论】:

  • 我明白,但这不是重点。关键是这是一个学校项目,我的教授指示我在这个特定项目中使用 JDBC。有没有办法解决转换失败的问题?也许旧版本的 JDBC 可以工作,因为我已经看过很多使用旧 JDBC for android 的教程?
  • 您的教授是否提供了在 Android 中运行的 JDBC 的工作示例?
  • 不,如果更多的是自学/自学经验,本课程。我们只是被告知要为这个项目实现 JDBC。我得到了一个 JAVA 代码示例,但不是一个实际的工作项目。
  • 是的,超过 30 次。也许一个Maven依赖可以工作?知道我将如何设置它吗?
  • 我可能已经找到了解决方案。我编辑了我的答案,请查看提供的链接。
猜你喜欢
  • 2023-04-09
  • 2017-09-27
  • 2021-04-12
  • 2016-04-29
  • 1970-01-01
  • 2014-04-24
  • 1970-01-01
  • 1970-01-01
  • 2015-05-24
相关资源
最近更新 更多