1

I am developing an android app connecting to MySQL docker container in android studio and having problems with it. The problem is connection failure between the app and MySQL container. My test code is here:

package com.example.databaseapp;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import java.sql.Connection;
import java.sql.DriverManager;


public class MainActivity extends AppCompatActivity {
    private static final String url = "jdbc:mysql://localhost:3306/appDB";
    private static final String user = "root";
    private static final String pass = "my-sec";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        try {
            Class.forName("com.mysql.cj.jdbc.Driver").newInstance();
            System.out.println("Driver register success!");

        } catch (Exception e){
            System.out.println("Driver register failure...");
            e.printStackTrace();
        }

        try {
            Connection con = DriverManager.getConnection(url, user, pass);
            System.out.println("Database connection success!");

        } catch(Exception e) {
            System.out.println("Database connection failure...");
            e.printStackTrace();
        }
    }
}

The error code in the Run pane is here:

11/01 13:07:32: Applying changes to 'app' on Pixel 5 API 30.
V/studio.deploy: Prior agent invocations in this VM: 4
I/studio.deploy: Using Structure Redefinition Extension
Apply Changes successfully finished in 72 ms.
I/System.out: Driver register success!
I/System.out: Database connection failure...
W/System.err: java.sql.SQLNonTransientConnectionException: Could not create connection to database server.
        at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:110)
W/System.err:     at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)
        at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:89)
        at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:63)
W/System.err:     at com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:1001)
        at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:818)
        at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:448)
        at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:241)
        at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:198)
W/System.err:     at java.sql.DriverManager.getConnection(DriverManager.java:580)
        at java.sql.DriverManager.getConnection(DriverManager.java:218)
W/System.err:     at com.example.databaseapp.MainActivity.onCreate(MainActivity.java:29)
        at android.app.Activity.performCreate(Activity.java:7994)
        at android.app.Activity.performCreate(Activity.java:7978)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3422)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601)
        at android.app.ActivityThread.handleRelaunchActivityInner(ActivityThread.java:5456)
W/System.err:     at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:5362)
        at android.app.servertransaction.ActivityRelaunchItem.execute(ActivityRelaunchItem.java:69)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
        at android.app.ClientTransactionHandler.executeTransaction(ClientTransactionHandler.java:58)
W/System.err:     at android.app.ActivityThread.handleRelaunchActivityLocally(ActivityThread.java:5415)
        at android.app.ActivityThread.access$3300(ActivityThread.java:237)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2076)
W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:223)
        at android.app.ActivityThread.main(ActivityThread.java:7656)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
W/System.err: Caused by: android.os.NetworkOnMainThreadException
        at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1605)
        at java.net.Inet6AddressImpl.lookupHostByName(Inet6AddressImpl.java:115)
W/System.err:     at java.net.Inet6AddressImpl.lookupAllHostAddr(Inet6AddressImpl.java:103)
        at java.net.InetAddress.getAllByName(InetAddress.java:1152)
        at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:133)
        at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:63)
W/System.err:     at com.mysql.cj.NativeSession.connect(NativeSession.java:119)
        at com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:948)
        ... 27 more

MySQL container description 1

MySQL container description 2

Database

I am using mysql-connector-java:8.0.26 for JDBC

I am a beginner developer and new to this kind of problem. So, I hope someone can help me...

Sweta Jain
  • 3,248
  • 6
  • 30
  • 50
Katelyn
  • 41
  • 1
  • 5
  • Check If MySQL is running on port 3306. – Rose Nov 01 '21 at 05:23
  • Don't try to connect to a database directly from Android. Use a web service to mediate between your app and database. However your specific problem is `android.os.NetworkOnMainThreadException`. You can't do network operations on the main thread in Android. – Mark Rotteveel Nov 01 '21 at 11:41
  • @Rose I checked MySQL is running on port 3306, but thanks your comment! – Katelyn Nov 03 '21 at 00:37
  • @MarkRotteveel I am trying a web service! Thanks! – Katelyn Nov 03 '21 at 01:55

0 Answers0