java - 连接到 MySql 数据库时,Andriod studios 应用程序崩溃
问题描述
目前,我在 android studios 中的应用程序在尝试连接到 MySql 数据库时崩溃。使用调试模式,它显示崩溃发生在我的 MainActivity.java 的第 46 行。
Connection connection = DriverManager.getConnection("jdbc:mysql://192.168.0.124:3306/android","andro","andro");
奇怪的是,当使用错误的密码连接时,它会吐出这个错误代码
java.sql.SQLException: Access denied for user 'andro'@'LAPTOP-NFKLKR3L' (using password: YES)
如果有帮助,这是完整的代码和 logcat
MainActivity.java
package de.vogella.mysql.androidmysql;
import androidx.appcompat.app.AppCompatActivity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class MainActivity extends AppCompatActivity {
TextView text, errorText;
Button show;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
text = (TextView) findViewById(R.id.textView);
errorText = (TextView) findViewById(R.id.textView2);
show = (Button) findViewById(R.id.button);
show.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new Task().execute();
}
});
}
class Task extends AsyncTask <Void, Void, Void>{
String records="", error="";
@Override
protected Void doInBackground(Void... voids) {
try{
Class.forName("com.mysql.cj.jdbc.Driver");
//Connection connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/android","root","test123");
Connection connection = DriverManager.getConnection("jdbc:mysql://192.168.0.124:3306/android","andro","andro");
Statement statement = connection.createStatement();
//ResultSet resultSet = statement.executeQuery("Select * FROM new_table");
ResultSet resultSet = statement.executeQuery("Select * FROM test");
while (resultSet.next()){
records += resultSet.getString(1) + " " + resultSet.getString(2) + "\n";
}
}
catch (Exception e){
error = e.toString();
}
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
text.setText(records);
if (error != "")
errorText.setText(error);
super.onPostExecute(aVoid);
}
}
}'''
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginBottom="67dp"
android:text="TextView"
android:textSize="24sp"
app:layout_constraintBottom_toTopOf="@+id/button"
app:layout_constraintStart_toStartOf="@+id/button" />
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:layout_marginBottom="56dp"
android:text="Show Records"
android:textSize="24sp"
app:layout_constraintBottom_toTopOf="@+id/textView2"
app:layout_constraintStart_toStartOf="@+id/textView2" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="28dp"
android:layout_marginBottom="264dp"
android:text="No Error"
android:textSize="24sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
日志猫
2021-05-03 22:11:19.111 5369-5428/de.vogella.mysql.androidmysql E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1
Process: de.vogella.mysql.androidmysql, PID: 5369
java.lang.RuntimeException: An error occurred while executing doInBackground()
at android.os.AsyncTask$4.done(AsyncTask.java:415)
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:305)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:923)
Caused by: java.lang.NoClassDefFoundError: Failed resolution of: Ljava/sql/SQLType;
at com.mysql.cj.jdbc.DatabaseMetaData.getInstance(DatabaseMetaData.java:765)
at com.mysql.cj.jdbc.ConnectionImpl.getMetaData(ConnectionImpl.java:1175)
at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:444)
at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:246)
at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:198)
at java.sql.DriverManager.getConnection(DriverManager.java:580)
at java.sql.DriverManager.getConnection(DriverManager.java:218)
at de.vogella.mysql.androidmysql.MainActivity$Task.doInBackground(MainActivity.java:46)
at de.vogella.mysql.androidmysql.MainActivity$Task.doInBackground(MainActivity.java:38)
at android.os.AsyncTask$3.call(AsyncTask.java:394)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:305)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:923)
Caused by: java.lang.ClassNotFoundException: Didn't find class "java.sql.SQLType" on path: DexPathList[[zip file "/data/app/~~THuka99suUWYu1b7kAZCNQ==/de.vogella.mysql.androidmysql-b1gObJE34c5dALSARnq7UQ==/base.apk"],nativeLibraryDirectories=[/data/app/~~THuka99suUWYu1b7kAZCNQ==/de.vogella.mysql.androidmysql-b1gObJE34c5dALSARnq7UQ==/lib/x86, /system/lib, /system_ext/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:207)
at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
at com.mysql.cj.jdbc.DatabaseMetaData.getInstance(DatabaseMetaData.java:765)
at com.mysql.cj.jdbc.ConnectionImpl.getMetaData(ConnectionImpl.java:1175)
at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:444)
at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:246)
at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:198)
at java.sql.DriverManager.getConnection(DriverManager.java:580)
at java.sql.DriverManager.getConnection(DriverManager.java:218)
at de.vogella.mysql.androidmysql.MainActivity$Task.doInBackground(MainActivity.java:46)
at de.vogella.mysql.androidmysql.MainActivity$Task.doInBackground(MainActivity.java:38)
at android.os.AsyncTask$3.call(AsyncTask.java:394)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:305)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:923)
2021-05-03 22:11:19.239 5369-5428/de.vogella.mysql.androidmysql I/Process: Sending signal. PID: 5369 SIG: 9
解决方案
推荐阅读
- notifications - 如何解决某些设备未发送 Expo 推送通知的问题
- python - 烧瓶没有给我错误
- r - 具有多个 Id 和变量的 dcast
- javascript - 双击另一个元素时如何按ID号删除元素?
- sql - 在 Redshift 中解析 JSON 6 级深度
- webdriver-io - 如何使用黄瓜 js 和 webdriver io 自动执行诱惑报告?
- javascript - 一些动作后的语音到文本识别
- python - 坚持将整数转换为罗马数字
- javascript - 将道具从父母传递给孩子并在React中使用地图循环?
- tsql - 如何动态添加 where 子句的一部分?