首页 > 解决方案 > 在 Android Studio 中连接 mysql 数据库时遇到此错误

问题描述

我正在使用下面的代码。它在 Android Studio 中给出错误。我看过其他相关帖子,我知道错误可能出在 doInBackground 方法中,但我不明白我必须更改哪个代码位置。

这是Java代码:

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

    username = (EditText) findViewById(R.id.username);
    password = (EditText) findViewById(R.id.pass);
    buttonLogin = (Button) findViewById(R.id.button);



        buttonLogin.setOnClickListener(new View.OnClickListener()  {


            @Override
                public void onClick (View v) {
                    System.out.println("IN ONCLICK");
                    new CheckLogin().execute();

                }
        });




}
public class CheckLogin extends AsyncTask<Void, Void ,Void>
{

    @Override
    protected Void doInBackground(Void... voids) {
        System.out.println("DOING BACKGROUND");



        try {
            System.out.println("IN TRY");
            Class.forName("com.mysql.jdbc.Driver");
            //Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/db_app?characterEncoding=latin1","root","/*ajdsikijliaj*$lklk%n^T!#@");
            String dbName = "db_app";
            String dbUserName = "root";
            String dbPassword = "/*ajdsikijliaj*$lklk%n^T!#@";
            String connectionString = "jdbc:mysql://localhost/" + dbName + "?user=" + dbUserName + "&password=" + dbPassword + "&useUnicode=true&characterEncoding=UTF-8";
            Connection con = DriverManager.getConnection(connectionString);

            String str = "Select * from users";
            Statement stmt = con.createStatement();
            ResultSet rs = stmt.executeQuery(str);
            rs.next();


            if(rs.getString("Username").equals(username.getText()) && rs.getString("Password").equals(password.getText()))
            {     System.out.println("EQUAL");
                Intent loginIntent = new Intent(MainActivity.this,login.class);
                startActivity(loginIntent);
            }
            else {
                System.out.println("WRONG");
            }
            stmt.close();

        }
        catch (ClassNotFoundException | SQLException e)
        {
            System.out.println("In catch");
            e.printStackTrace();
        }

        return null;

    }



}

}

我面临的错误

E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1
Process: com.example.login10, PID: 17730
java.lang.RuntimeException: An error occurred while executing doInBackground()
    at android.os.AsyncTask$3.done(AsyncTask.java:353)
    at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:383)
    at java.util.concurrent.FutureTask.setException(FutureTask.java:252)
    at java.util.concurrent.FutureTask.run(FutureTask.java:271)
    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
    at java.lang.Thread.run(Thread.java:764)
 Caused by: java.lang.IllegalArgumentException: URLDecoder: Illegal hex characters in escape (%) pattern : %n^
    at java.net.URLDecoder.decode(URLDecoder.java:177)
    at com.mysql.jdbc.NonRegisteringDriver.parseURL(NonRegisteringDriver.java:605)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:277)
    at java.sql.DriverManager.getConnection(DriverManager.java:569)
    at java.sql.DriverManager.getConnection(DriverManager.java:237)
    at com.example.login10.MainActivity$CheckLogin.doInBackground(MainActivity.java:75)
    at com.example.login10.MainActivity$CheckLogin.doInBackground(MainActivity.java:56)
    at android.os.AsyncTask$2.call(AsyncTask.java:333)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636) 
    at java.lang.Thread.run(Thread.java:764) 

标签: javaandroid-studio

解决方案


推荐阅读