2016-09-22 101 views
0

我想解決這個問題4個小時,我完全沒有希望。Android studio JDBC MySQL

我正在使用android studio編碼此應用程序。我創建了一個簡單的活動,其中包含用戶名和密碼的編輯字段,接下來有一個按鈕用於從這兩個編輯字段提交數據。

我使用的MySQL連接器/ J和Java代碼如下:「連接到數據庫失敗」

package allanko.quizzerappandroid; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.widget.TextView; 

import java.sql.*; 

public class LoginActivity extends AppCompatActivity 
{ 
    private static CDatabase db; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_login); 

     db = new CDatabase(); 
    } 

    /* 
    public static CDatabase getDB() 
    { 
     return db; 
    }*/ 

    public class CDatabase 
    { 
     private String db_name; 
     private String db_user; 
     private String db_pass; 
     private Connection connection; 
     private boolean isConnected; 

     public CDatabase() 
     { 
      db_name = "jdbc:mysql://localhost:3306/quizzer?useSSL=false"; 
      db_user = "quizzer"; 
      db_pass = "pass"; 
      connection = null; 

      if(connect() == true) 
       isConnected = true; 
      else 
       isConnected = false; 
      printResult(); 
     } 

     private boolean connect() 
     { 
      try 
      { 
       connection = DriverManager.getConnection(db_name, db_user, db_pass); 
       return true; 
      } 
      catch(Exception exc) 
      { 
       exc . printStackTrace(); 
       return false; 
      } 
     } 

     private void printResult() 
     { 
      TextView dbText = (TextView)findViewById(R.id.dbText); 

      if(! isConnected) 
      dbText . setText("Connection to database failed"); 
      else 
      dbText . setText("Connected to database."); 
     } 

     public ResultSet query(String query) throws SQLException 
     { 
      Statement statement = connection . createStatement(); 
      return statement . executeQuery(query); 
     } 

     public boolean isConnected() 
     { 
      return isConnected; 
     } 
    } 
} 

當我在仿真器或我的手機,它的每一次寫操作是否啓動此應用程序而我從控制檯得到這個:

W/art: Common causes for lock verification issues are non-optimized dex code 
W/art: and incorrect proguard optimizations. 
W/art: Class android.support.v4.util.LruCache failed lock verification and will run slower. 
W/art: Before Android 4.1, method android.graphics.PorterDuffColorFilter android.support.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) would have incorrectly overridden the package-private method in android.graphics.drawable.Drawable 
W/System.err: java.sql.SQLException: java.lang.VerifyError: Verifier rejected class com.mysql.jdbc.CharsetMapping: void com.mysql.jdbc.CharsetMapping.<clinit>() failed to verify: void com.mysql.jdbc.CharsetMapping.<clinit>(): [0x4287] Invalid reg type for array index (Precise Reference: com.mysql.jdbc.MysqlCharset[]) (declaration of 'com.mysql.jdbc.CharsetMapping' appears in /data/app/allanko.quizzerappandroid-1/base.apk) 
W/System.err:  at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:963) 
W/System.err:  at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:896) 
W/System.err:  at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:885) 
W/System.err:  at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:860) 
W/System.err:  at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:877) 
W/System.err:  at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:873) 
W/System.err:  at com.mysql.jdbc.Util.handleNewInstance(Util.java:422) 
W/System.err:  at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:410) 
W/System.err:  at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:328) 
W/System.err:  at java.sql.DriverManager.getConnection(DriverManager.java:569) 
W/System.err:  at java.sql.DriverManager.getConnection(DriverManager.java:219) 
W/System.err:  at allanko.quizzerappandroid.LoginActivity$CDatabase.connect(LoginActivity.java:55) 
W/System.err:  at allanko.quizzerappandroid.LoginActivity$CDatabase.<init>(LoginActivity.java:43) 
W/System.err:  at allanko.quizzerappandroid.LoginActivity.onCreate(LoginActivity.java:19) 
W/System.err:  at android.app.Activity.performCreate(Activity.java:6664) 
W/System.err:  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118) 
W/System.err:  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2599) 
W/System.err:  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707) 
W/System.err:  at android.app.ActivityThread.-wrap12(ActivityThread.java) 
W/System.err:  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460) 
W/System.err:  at android.os.Handler.dispatchMessage(Handler.java:102) 
W/System.err:  at android.os.Looper.loop(Looper.java:154) 
W/System.err:  at android.app.ActivityThread.main(ActivityThread.java:6077) 
W/System.err:  at java.lang.reflect.Method.invoke(Native Method) 
W/System.err:  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865) 
W/System.err:  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755) 
W/System.err: Caused by: java.lang.VerifyError: Verifier rejected class com.mysql.jdbc.CharsetMapping: void com.mysql.jdbc.CharsetMapping.<clinit>() failed to verify: void com.mysql.jdbc.CharsetMapping.<clinit>(): [0x4287] Invalid reg type for array index (Precise Reference: com.mysql.jdbc.MysqlCharset[]) (declaration of 'com.mysql.jdbc.CharsetMapping' appears in /data/app/allanko.quizzerappandroid-1/base.apk) 
W/System.err:  at com.mysql.jdbc.CharsetMapping.getNumberOfCharsetsConfigured(CharsetMapping.java:687) 
W/System.err:  at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:464) 
W/System.err:  at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47) 
W/System.err:  at java.lang.reflect.Constructor.newInstance0(Native Method) 
W/System.err:  at java.lang.reflect.Constructor.newInstance(Constructor.java:430) 
W/System.err:  at com.mysql.jdbc.Util.handleNewInstance(Util.java:404) 
W/System.err: ... 19 more 
W/gralloc_ranchu: Gralloc pipe failed 

我徹底絕望了,因爲我想給Google來到我的腦海裏並沒有什麼工作的一切。

在此先感謝您的答案。

+0

你的MySQL在哪裏運行? –

+0

在我的本地主機上。 – scarface

+0

順便說一下,不管我嘗試連接到本地mysql還是遠程連接,它都是這樣。 – scarface

回答

0

希望this鏈接應該可以幫助你解決問題。恰巧你會提到這個項目而不是指向相應的庫。

編譯器標記此類方法簽名不符合時的問題。 JVM在類加載時驗證字節碼,並在字節碼嘗試執行不應該允許的操作時拋出VerifyError

其他可能性來檢查這可以是:

  1. 這可能是因爲在引用的庫變化。 Clean Project,然後是Build可能會有所幫助!
  2. 重新啓動IDE也可能會有所幫助,因爲IDE的錯誤可能是引用必需jar的錯誤版本。
0

我有同樣的問題。 (對不起,我不會說英語)。

我的解決方案是更改MySql驅動程序x MariaDB驅動程序。

我認爲這個問題是有兩個同名的com.mysql.jdbc.CharsetMapping類。當我使用MariaDB,org.mariadb.jdbc.Driver時,我將第二個類更改爲org.mariadb.jdbc.CharsetMapping,並解決了問題。

我希望這對你有所幫助。

此致敬禮。