java - 在 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)
解决方案
推荐阅读
- java - 努力使用 RecyclerView 从 Firebase 检索信息
- javascript - 从 Github 为 SAPUI5 WebIde 安装 NPM 包
- powershell - 如何在 PowerShell 中获取网络连接类型
- javascript - 无法更改数据表标题
- excel - 避免在可见范围内复制粘贴
- python-3.x - VTK 导入在 vtkCommonKit.py 第 5 行中抛出 DLL 加载错误的错误
- html - 元素之间难以理解的空间
- ios - 处理 UICollectionView 单元内的 UITextFiled 的键盘返回操作
- ios - Xcode 中大约 100 个错误,架构 x86_64 的未定义符号:将 react-native 从 0.59.1 升级到 0.60.5
- azure - 更改多阶段管道中 1 阶段的存储库