android JDBC mysql java 连接器应用程序:preDexDebug

Posted

技术标签:

【中文标题】android JDBC mysql java 连接器应用程序:preDexDebug【英文标题】:android JDBC mysql java connector app:preDexDebug 【发布时间】:2016-01-16 11:14:33 【问题描述】:

我正在尝试学习如何使用 JDBC 将应用程序连接到 mysql 数据库。

我正在使用 android Studio。

我从 MySQL 网站下载了“mysql-connector-java-5.1.37”。

只是为了将“mysql-connector-java-5.1.37-bin.jar”放在 Hello World 应用程序的 libs 文件夹中并编译我收到:

错误:任务 ':app:preDexDebug' 执行失败。 com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'C:\Program Files\Java\jdk1.8.0_45\bin\java.exe'' 完成非零退出值 1

build.gradle:

apply plugin: 'com.android.application'

android 
    compileSdkVersion 23
    buildToolsVersion "22.0.1"

    defaultConfig 
        applicationId "br.com.myaplication.helloworld"
        minSdkVersion 15
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    
    buildTypes 
        release 
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        
    


dependencies 
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.1.0'

【问题讨论】:

你如何构建你的项目?使用 gradle 构建?你应该试试 gradle clean build! 我只是按下了android studio的运行按钮。我怎么做? (对不起,我是新手) 真实项目请不要这样做:***.com/questions/15853367/… @MorrisonChang thx 的帮助,但我在使用网络服务时也遇到了问题 haha​​hhaa.. 我也有同样的问题。有人找到解决方案了吗? 【参考方案1】:

尝试同步您的项目 Tools -> Android -> Sync Project with Gradle Files

然后重建你的项目: build -> rebuild project

【讨论】:

您在构建项目时收到您发布的错误信息?您能否在构建时发布完整的 gradle 日志 是的,在构建时.. 不适合这里,但在这里开始错误:app:processDebugJavaRes UP-TO-DATE :app:compileDebugJavaWithJavac UP-TO-DATE :app:compileDebugNdk UP-TO-DATE : app:compileDebugSources UP-TO-DATE :app:preDexDebug AGPBI: "kind":"simple","text":"warning: Ignoring InnerClasses attribute for an anonymous inner class","sources":[] AGPBI : "kind":"simple","text":"(com.mysql.jdbc.Connection$1) 不带有","sources":[] AGPBI: "kind": "simple","text":"关联的 EnclosureMethod 属性。【参考方案2】:

我遇到了同样的问题,问题出在 mysql-connector-java-5.1.37.jar 文件中。我从here 下载了一个旧版本 (mysql-connector-java-3.0.17-ga-bin.jar) 并且工作得很好。

要获得连接,请使用:

Class.forName("com.mysql.jdbc.Driver").newInstance();
String connection = "jdbc:mysql://"+ your_ip + ":"+ your_port +"/"+ database_name;
conn = DriverManager.getConnection(connection, user, pass); 

以防万一,别忘了在你的 build.gradle 中编译它:

dependencies 
    //other stuff
    compile files('libs/mysql-connector-java-3.0.17-ga-bin.jar')

PD:这仅在您使用来自和 AsyncTask 的连接时才有效

【讨论】:

【参考方案3】:

由于分布式mysql-connector-java-5.1.37-bin.jar是针对Java1.8编译的,目前Android dex编译器无法识别。

$ javap -v com/mysql/jdbc/JDBC42Helper.class| grep "major version"
  major version: 52

另一方面,mysql-connector-java-5.1.36.jar 是为 Java1.6 编译的。

$ javap -v com/mysql/jdbc/JDBC4Connection.class |grep "major version"
  major version: 50

5.1.37 supports JDBC4.2,所以需要Java1.8。

【讨论】:

以上是关于android JDBC mysql java 连接器应用程序:preDexDebug的主要内容,如果未能解决你的问题,请参考以下文章

android JDBC mysql java 连接器应用程序:preDexDebug

使用 JDBC 从 Android 连接到 MySQL

Android + MySQL 使用 com.mysql.jdbc.Driver

如何将 Mysql JDBC 驱动程序导入到 android studio

如何将 Mysql JDBC 驱动程序添加到 android studio

Android应用通过JDBC直连阿里云MySQL数据库