#android #mysql #jdbc
Вопрос:
Я получаю эту ошибку всякий раз, когда запрашиваю таблицу:
2021-06-15 11:13:30.550 18277-18343/com.example.myapplication E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1
Process: com.example.myapplication, PID: 18277
java.lang.RuntimeException: An error occurred while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:365)
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:257)
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:784)
Caused by: java.lang.NoClassDefFoundError: Failed resolution of: Lcom/mysql/cj/MysqlType;
at com.mysql.cj.protocol.a.NativeProtocol.findMysqlType(NativeProtocol.java:1466)
at com.mysql.cj.protocol.a.ColumnDefinitionReader.unpackField(ColumnDefinitionReader.java:134)
at com.mysql.cj.protocol.a.ColumnDefinitionReader.read(ColumnDefinitionReader.java:77)
at com.mysql.cj.protocol.a.ColumnDefinitionReader.read(ColumnDefinitionReader.java:40)
at com.mysql.cj.protocol.a.NativeProtocol.read(NativeProtocol.java:1588)
at com.mysql.cj.protocol.a.TextResultsetReader.read(TextResultsetReader.java:68)
at com.mysql.cj.protocol.a.TextResultsetReader.read(TextResultsetReader.java:48)
at com.mysql.cj.protocol.a.NativeProtocol.read(NativeProtocol.java:1601)
at com.mysql.cj.protocol.a.NativeProtocol.readAllResults(NativeProtocol.java:1655)
at com.mysql.cj.NativeSession.loadServerVariables(NativeSession.java:765)
at com.mysql.cj.jdbc.ConnectionImpl.initializePropsFromServer(ConnectionImpl.java:1303)
at com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:964)
at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:823)
at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:453)
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:569)
at java.sql.DriverManager.getConnection(DriverManager.java:219)
at com.example.myapplication.MainActivity$Task.doInBackground(MainActivity.java:177)
at com.example.myapplication.MainActivity$Task.doInBackground(MainActivity.java:170)
at android.os.AsyncTask$2.call(AsyncTask.java:345)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:257)
Вот мой код. Я пытаюсь запросить таблицу с удаленного сервера mysql. Соединение работает нормально, но ошибка возникает всякий раз, когда я пытаюсь запросить строки и отобразить столбцы в текстовом представлении.
class Task extends AsyncTask<Void,Void,Void> {
String records = "", errors = "";
@Override
protected Void doInBackground(Void... voids) {
try{
Class.forName("com.mysql.cj.jdbc.Driver");
Connection connection = DriverManager.getConnection("jdbc:mysql://IP/DB","user","pass");
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("select * from android_test");
while(resultSet.next()){
records = resultSet.getString(1) " " resultSet.getString(2) "n";
}
}catch (Exception e){
errors = e.toString();
}
return null;
}
public void onPostExecute(Void aVoid){
message.setText(records);
if (errors != "") {
message.setText(errors);
Toast.makeText(MainActivity.this,errors.toString(),Toast.LENGTH_LONG).show();
}
}
}
Комментарии:
1. Я смог избавиться от ошибки, понизив драйвер jdbc до 5.1.4.