0

I had checked previous questions on these but not able to find solution. I'm newbie in android. I want to connect directly to mysql database server. For local database sqlite I'm aware of please and don't want to connect with that.

I'm trying this code. I have added dependencies in gradle, added user privilege in Mysql server.

package com.example.mysqk;

import androidx.appcompat.app.AppCompatActivity;

import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ConnectToDatabaseTask connectToDatabaseTask = new ConnectToDatabaseTask();
        connectToDatabaseTask.execute();
   //   new ConnectToDatabaseTask().execute();

    }


    private class ConnectToDatabaseTask extends AsyncTask<Void, Void, Void> {
        String url = "jdbc:mysql://xxx.xxx.x.x:3306/world?useSSL=false&allowPublicKeyRetrieval=true";
        String username = "xxx";
        String password = "Xxx";
        Connection connection = null;


        @Override
        protected Void doInBackground(Void... voids) {
            try {
                connection = DriverManager.getConnection(url, username, password);
                Statement statement = connection.createStatement();
                ResultSet resultSet = statement.executeQuery("SELECT * FROM employees LIMIT 10 ");
                while (resultSet.next()) {
                    String name = resultSet.getString("name");
                    String population = resultSet.getString("department");
                    System.out.println(name + " " + population);
                }
                resultSet.close();
                statement.close();
                connection.close();
            } catch (SQLException e) {
               Log.e("MyApp", "Error while connecting to database"+ e.getMessage().toString(),e);
                e.printStackTrace();
            }
            return null;
        }

        @Override
        protected void onPostExecute(Void aVoid) {
            super.onPostExecute(aVoid);
            // You can show a toast message here to indicate that the data has been retrieved successfully
            Toast.makeText(MainActivity.this, "Data retrieved successfully", Toast.LENGTH_SHORT).show();
        }
    }
}

While running this code, the app is crashing with the Logs as ,mentioned below

FATAL EXCEPTION: AsyncTask #1
Process: com.example.mysqk, PID: 26856
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:381)
at java.util.concurrent.FutureTask.setException(FutureTask.java:250)
at java.util.concurrent.FutureTask.run(FutureTask.java:269)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:305)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1137)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637)
at java.lang.Thread.run(Thread.java:1012)
Caused by: java.lang.NoClassDefFoundError: Failed resolution of: Ljava/sql/SQLType;
at com.mysql.cj.jdbc.DatabaseMetaData.getInstance(DatabaseMetaData.java:768)
at com.mysql.cj.jdbc.ConnectionImpl.getMetaData(ConnectionImpl.java:1169)
at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:439)
at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:241)
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 com.example.mysqk.MainActivity$ConnectToDatabaseTask.doInBackground(MainActivity.java:39)
at com.example.mysqk.MainActivity$ConnectToDatabaseTask.doInBackground(MainActivity.java:29)
at android.os.AsyncTask$3.call(AsyncTask.java:394)
at java.util.concurrent.FutureTask.run(FutureTask.java:264)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:305) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1137) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637) 
at java.lang.Thread.run(Thread.java:1012) 
Caused by: java.lang.ClassNotFoundException: Didn't find class "java.sql.SQLType" on path: DexPathList[[dex file "/data/data/com.example.mysqk/code_cache/.overlay/base.apk/classes3.dex", zip file "/data/app/~~JQTRM_VdBHFyDtKa6sRjtQ==/com.example.mysqk-KqjfMJ8Q8I5NhMVqouUIfA==/base.apk"],nativeLibraryDirectories=[/data/app/~~JQTRM_VdBHFyDtKa6sRjtQ==/com.example.mysqk-KqjfMJ8Q8I5NhMVqouUIfA==/lib/arm64, /system/lib64, /system_ext/lib64]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:259)
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:768) 
at com.mysql.cj.jdbc.ConnectionImpl.getMetaData(ConnectionImpl.java:1169) 
at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:439) 
at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:241) 
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 com.example.mysqk.MainActivity$ConnectToDatabaseTask.doInBackground(MainActivity.java:39) 
at com.example.mysqk.MainActivity$ConnectToDatabaseTask.doInBackground(MainActivity.java:29) 
at android.os.AsyncTask$3.call(AsyncTask.java:394) 
at java.util.concurrent.FutureTask.run(FutureTask.java:264) 
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:305) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1137) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637) 
at java.lang.Thread.run(Thread.java:1012) 
--------- beginning of system
Hovercraft Full Of Eels
  • 283,665
  • 25
  • 256
  • 373
  • 1
    You understand that the cause of the error is this?: Caused by: java.lang.ClassNotFoundException: Didn't find class "java.sql.SQLType" on path: DexPathList[[dex file "/data/data/com.example.mysqk/code_cache/.overlay/base.apk/classes3.dex", zip file "/data/app/~~JQTRM_VdBHFyDtKa6sRjtQ==/com.example.mysqk-KqjfMJ8Q8I5NhMVqouUIfA==/base.apk"],nativeLibraryDirectories=[/data/app/~~JQTRM_VdBHFyDtKa6sRjtQ==/com.example.mysqk-KqjfMJ8Q8I5NhMVqouUIfA==/lib/arm64, /system/lib64, /system_ext/lib64]] – tgdavies Jan 04 '23 at 12:11

0 Answers0