2016-09-22 102 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,并解决了问题。

我希望这对你有所帮助。

此致敬礼。