簡體   English   中英

編譯MySQL Connector Jar文件時出現Android Studio preDexDebug錯誤

[英]Android Studio preDexDebug error when compiling MySQL Connector Jar file

嘗試連接到Android Studio 1.4.1中的MySQL數據庫。 將MySQL Connector JAR文件放置在libs目錄中,並通過編譯文件('libs / mysql.jar')將其添加為庫。

當我嘗試運行該應用程序時,出現以下錯誤:

:app:preDexDebug
UNEXPECTED TOP-LEVEL EXCEPTION:
java.lang.RuntimeException: Exception parsing classes
at com.android.dx.command.dexer.Main.processClass(Main.java:752)
at com.android.dx.command.dexer.Main.processFileBytes(Main.java:718)
at com.android.dx.command.dexer.Main.access$1200(Main.java:85)
at com.android.dx.command.dexer.Main$FileBytesConsumer.processFileBytes(Main.java:1645)
at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:284)
at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:166)
at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:144)
at com.android.dx.command.dexer.Main.processOne(Main.java:672)
at com.android.dx.command.dexer.Main.processAllFiles(Main.java:574)
at com.android.dx.command.dexer.Main.runMonoDex(Main.java:311)
at com.android.dx.command.dexer.Main.run(Main.java:277)
at com.android.dx.command.dexer.Main.main(Main.java:245)
at com.android.dx.command.Main.main(Main.java:106)

Caused by: com.android.dx.cf.iface.ParseException: bad class file magic (cafebabe) or version (0034.0000)
at com.android.dx.cf.direct.DirectClassFile.parse0(DirectClassFile.java:472)
at com.android.dx.cf.direct.DirectClassFile.parse(DirectClassFile.java:406)
at com.android.dx.cf.direct.DirectClassFile.parseToInterfacesIfNecessary(DirectClassFile.java:388)
at com.android.dx.cf.direct.DirectClassFile.getMagic(DirectClassFile.java:251)
at com.android.dx.command.dexer.Main.parseClass(Main.java:764)
at com.android.dx.command.dexer.Main.access$1500(Main.java:85)
at com.android.dx.command.dexer.Main$ClassParserTask.call(Main.java:1684)
at com.android.dx.command.dexer.Main.processClass(Main.java:749)
... 12 more
1 error; aborting
Error:Execution failed for task ':app:preDexDebug'.
> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: 
    Process 'command 'C:\Program Files\Java\jdk1.8.0_74\bin\java.exe'' finished with non-zero exit value 1

這是我的build.gradle:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.2"

    defaultConfig {
        applicationId "com.example.breandan.dishfinder"
        minSdkVersion 16
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.1.1'
    compile 'com.android.support:design:23.1.1'
    compile files('libs/mysql.jar')
}

當我刪除編譯文件('libs / mysql.jar')行時,代碼會運行,但不會執行任何數據庫代碼。

如果要將MySQL JAR添加到項目中,可以用三種標准方法來完成。 如果您以這些標准方式進行操作,Android Studio將識別它們。 請閱讀此鏈接https://stackoverflow.com/a/35369267/5475941 在這篇文章中,我解釋了如何在Android Studio中導入JAR文件,並通過屏幕快照逐步說明了所有可能的方法。

在這里可以找到JAR文件(您應該具有免費的Oracle帳戶下載):

https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.38.tar.gz

您也可以在本地MySQL安裝目錄中找到它。 這是我機器上的地址。

在此處輸入圖片說明

然后,將其添加到您的Android Studio中:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.Statement;

然后,您可以像這樣使用它:

public class MysqlSample01Activity extends Activity {

private static final String url = "jdbc:mysql://<server>:<port>/<database>";
private static final String user = "<your username>";
private static final String pass = "<your password>";

/** This will run when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    connectToDB();
}

public void connectToDB() {
    ...
    try {
        Class.forName("com.mysql.jdbc.Driver");
        Connection con = DriverManager.getConnection(url, user, pass);
        System.out.println("Database connection was successful");

        Statement st = con.createStatement();
        ResultSet rs = st.executeQuery("select * from table_name");
        ResultSetMetaData rsmd = rs.getMetaData();

        while(rs.next()) {
            result += rsmd.getColumnName(1) + ": " + rs.getInt(1) + "\n";
            result += rsmd.getColumnName(2) + ": " + rs.getString(2) + "\n";
        }
        ...
    }
    catch(Exception e) {
        e.printStackTrace();
        tv.setText(e.toString());
    }   

}
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM