【问题标题】:Android studio JDBC MySQL安卓工作室 JDBC MySQL
【发布时间】:2016-09-22 10:22:51
【问题描述】:

我试图解决这个问题 4 个小时,我完全没有希望。

我正在使用 android studio 来编写这个应用程序。我创建了一个简单的活动,其中包含用户名和密码的编辑字段,接下来有一个按钮,用于从这两个编辑字段提交数据。

我正在使用 mysql connector/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

我完全绝望了,因为我试图用谷歌搜索我想到的所有东西,但没有任何效果。

提前感谢您的回答。

【问题讨论】:

标签: java android mysql jdbc


【解决方案1】:

希望 this 链接能帮助您解决问题。碰巧您会引用项目而不是引用相应的库。

编译器会标记出方法签名不相符的此类问题。 JVM 会在加载类时验证字节码,并在字节码尝试执行不应被允许的操作时抛出 VerifyError

对此进行检查的其他可能性是:

  1. 这可能是因为引用的库发生了变化。 Clean Project 后跟 Build 可能会有所帮助!
  2. 重新启动 IDE 也可能会有所帮助,因为 IDE 可能会引用错误版本的必要 jar。

【讨论】:

    【解决方案2】:

    我有同样的问题。 (对不起,我英语说得不好)。

    我的解决方案是更改 MySql Driver x MariaDB Driver。

    我认为问题在于有两个同名的类 com.mysql.jdbc.CharsetMapping。当我使用 MariaDB 时,org.mariadb.jdbc.Driver 我将第二类更改为 org.mariadb.jdbc.CharsetMapping,问题就解决了。

    希望对你有所帮助。

    最好的问候。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-08
      • 2017-04-17
      • 2014-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多