我在使用Android Studio连接MySQL数据库时遇到了这个错误。

huangapple 未分类评论48阅读模式
英文:

I am facing this error while connecting with the mysql database in Android Studio

问题

这是我修改后的代码:

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

    username = findViewById(R.id.username);
    password = findViewById(R.id.pass);
    buttonLogin = 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");
            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().toString()) &&
                rs.getString("Password").equals(password.getText().toString())) {
                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;
    }
}

请注意,我将代码中的一些问题进行了修正。在比较用户名和密码时,我使用 .toString() 来获取 EditText 中的文本。另外,我还删除了注释中的非法字符,以便代码能够正常编译和执行。如果您继续遇到问题,请确保您的数据库连接配置正确,并且您的设备可以访问数据库。

英文:

I am using the below code. It is giving error in Android Studio. I have seen and other relevant posts and I understand that the error may be in doInBackground method, but I can't understand which place of code I must change.

Here is the Java code:

@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(&quot;IN ONCLICK&quot;);
                    new CheckLogin().execute();

                }
        });




}
public class CheckLogin extends AsyncTask&lt;Void, Void ,Void&gt;
{

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



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

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


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

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

        return null;

    }

    

}

}

Errors that I am facing

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)&#160;
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)&#160;
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)&#160;
    at java.lang.Thread.run(Thread.java:764)&#160;

huangapple
  • 本文由 发表于 2020年5月5日 16:35:18
  • 转载请务必保留本文链接:https://java.coder-hub.com/61609015.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定