Henrik Martens
Henrik Martens

Reputation: 29

MySQL Connection - java.sql.SQLException: Unable to connect to any hosts due to exception

I have a Problem, and I can't find any answer.

I try to load a MySQL-Connection with JDBC. The Lib is imported. Here is my Code.

import android.widget.Toast;

import java.util.ArrayList;
import java.sql.*;
import java.util.Calendar;

/**
 * Created by Henrik on 27.12.2015.
 */
public class MySQLHandler {

public static final String server = "aintlarry.lima-db.de";
public static final String port = "3306";
public static final String username = "**********";
public static final String password = "********";
public static final String dbName = "db_338853_1";

static Connection connection = null;

MainActivity Ma;

public static void main(String[] args){
    try {
        Class.forName("com.mysql.jdbc.Driver").newInstance();;
    }
    catch (Exception e) {
    }
}

public String makeTableName(){

    String tableName = "";

    Calendar c = Calendar.getInstance();
    int year = c.get(Calendar.YEAR);
    int month = c.get(Calendar.MONTH);
    int day = c.get(Calendar.DAY_OF_MONTH);

    tableName = "" + year + month + day;

    return tableName;

}

public void startNewEvent(ArrayList<Player> players) {

    String tableName = makeTableName();

    try {
        String url = "jdbc:mysql://"+server+":"+port+"/"+dbName;
        connection = DriverManager.getConnection(url, username, password);

        if(doTableExists(tableName) == false){

            String hName = "Henrik";
            int hMoney = 0;
            int hTip = 0;

            Statement statementH = connection.createStatement();
            String sqlCommand = "CREATE TABLE '" + tableName + "'";
            statementH.executeUpdate(sqlCommand);

            for (Player p : players) {
                String pName = p.getName();
                int pMoney = p.getMoney();
                int pTip = p.getTip();
            }

            connection.close();

        }else {
            Toast.makeText(Ma.getApplicationContext(), "Der heutige Wettbewerb wurde bereits erstellt!", Toast.LENGTH_LONG).show();
        }
    }

    catch (SQLException sqle) {
        sqle.printStackTrace();
    }

}

public boolean doTableExists(String tbName){
    boolean b = false;

    try {
        String url = "jdbc:mysql://"+server+":"+port+"/"+dbName;
        connection = DriverManager.getConnection(url, username, password);

        Statement statement = connection.createStatement();
        String sqlCommand = "SHOW TABLES LIKE '" + tbName + "'";
        ResultSet rs = statement.executeQuery(sqlCommand);

        if(rs.getRow() == 0){
            b = false;
        }else{
            b = true;
        }

        connection.close();

    } catch (SQLException sqle) {

    }

    return b;
}

}

Log:

12-31 15:06:48.524 32314-32314/de.aintlarry.patsch W/System.err: java.sql.SQLException: Unable to connect to any hosts due to exception: android.os.NetworkOnMainThreadException
12-31 15:06:48.524 32314-32314/de.aintlarry.patsch W/System.err: ** BEGIN NESTED EXCEPTION ** 
12-31 15:06:48.524 32314-32314/de.aintlarry.patsch W/System.err: android.os.NetworkOnMainThreadException
12-31 15:06:48.524 32314-32314/de.aintlarry.patsch W/System.err: STACKTRACE:
12-31 15:06:48.524 32314-32314/de.aintlarry.patsch W/System.err: android.os.NetworkOnMainThreadException
12-31 15:06:48.524 32314-32314/de.aintlarry.patsch W/System.err:     at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1273)
12-31 15:06:48.524 32314-32314/de.aintlarry.patsch W/System.err:     at java.net.InetAddress.lookupHostByName(InetAddress.java:431)
12-31 15:06:48.524 32314-32314/de.aintlarry.patsch W/System.err:     at java.net.InetAddress.getAllByNameImpl(InetAddress.java:252)
12-31 15:06:48.524 32314-32314/de.aintlarry.patsch W/System.err:     at java.net.InetAddress.getAllByName(InetAddress.java:215)
12-31 15:06:48.524 32314-32314/de.aintlarry.patsch W/System.err:     at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:125)
12-31 15:06:48.524 32314-32314/de.aintlarry.patsch W/System.err:     at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:225)
12-31 15:06:48.524 32314-32314/de.aintlarry.patsch W/System.err:     at com.mysql.jdbc.Connection.createNewIO(Connection.java:1805)
12-31 15:06:48.524 32314-32314/de.aintlarry.patsch W/System.err:     at com.mysql.jdbc.Connection.<init>(Connection.java:452)
12-31 15:06:48.524 32314-32314/de.aintlarry.patsch W/System.err:     at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:411)
12-31 15:06:48.524 32314-32314/de.aintlarry.patsch W/System.err:     at java.sql.DriverManager.getConnection(DriverManager.java:179)
12-31 15:06:48.524 32314-32314/de.aintlarry.patsch W/System.err:     at java.sql.DriverManager.getConnection(DriverManager.java:213)
12-31 15:06:48.524 32314-32314/de.aintlarry.patsch W/System.err:     at de.aintlarry.patsch.MySQLHandler.startNewEvent(MySQLHandler.java:55)
12-31 15:06:48.524 32314-32314/de.aintlarry.patsch W/System.err:     at de.aintlarry.patsch.AddEventActivity.startEvent(AddEventActivity.java:86)
12-31 15:06:48.524 32314-32314/de.aintlarry.patsch W/System.err:     at de.aintlarry.patsch.AddEventActivity$2.onClick(AddEventActivity.java:59)
12-31 15:06:48.524 32314-32314/de.aintlarry.patsch W/System.err:     at android.view.View.performClick(View.java:5226)
12-31 15:06:48.524 32314-32314/de.aintlarry.patsch W/System.err:     at android.view.View$PerformClick.run(View.java:21266)
12-31 15:06:48.524 32314-32314/de.aintlarry.patsch W/System.err:     at android.os.Handler.handleCallback(Handler.java:739)
12-31 15:06:48.524 32314-32314/de.aintlarry.patsch W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:95)
12-31 15:06:48.524 32314-32314/de.aintlarry.patsch W/System.err:     at android.os.Looper.loop(Looper.java:168)
12-31 15:06:48.524 32314-32314/de.aintlarry.patsch W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:5781)
12-31 15:06:48.524 32314-32314/de.aintlarry.patsch W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
12-31 15:06:48.524 32314-32314/de.aintlarry.patsch W/System.err:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:797)
12-31 15:06:48.524 32314-32314/de.aintlarry.patsch W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:687)
12-31 15:06:48.524 32314-32314/de.aintlarry.patsch W/System.err: ** END NESTED EXCEPTION **
12-31 15:06:48.524 32314-32314/de.aintlarry.patsch W/System.err:     at com.mysql.jdbc.Connection.createNewIO(Connection.java:1875)
12-31 15:06:48.524 32314-32314/de.aintlarry.patsch W/System.err:     at com.mysql.jdbc.Connection.<init>(Connection.java:452)
12-31 15:06:48.524 32314-32314/de.aintlarry.patsch W/System.err:     at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:411)
12-31 15:06:48.524 32314-32314/de.aintlarry.patsch W/System.err:     at java.sql.DriverManager.getConnection(DriverManager.java:179)
12-31 15:06:48.524 32314-32314/de.aintlarry.patsch W/System.err:     at java.sql.DriverManager.getConnection(DriverManager.java:213)
12-31 15:06:48.524 32314-32314/de.aintlarry.patsch W/System.err:     at de.aintlarry.patsch.MySQLHandler.startNewEvent(MySQLHandler.java:55)
12-31 15:06:48.524 32314-32314/de.aintlarry.patsch W/System.err:     at de.aintlarry.patsch.AddEventActivity.startEvent(AddEventActivity.java:86)
12-31 15:06:48.524 32314-32314/de.aintlarry.patsch W/System.err:     at de.aintlarry.patsch.AddEventActivity$2.onClick(AddEventActivity.java:59)
12-31 15:06:48.525 32314-32314/de.aintlarry.patsch W/System.err:     at android.view.View.performClick(View.java:5226)
12-31 15:06:48.525 32314-32314/de.aintlarry.patsch W/System.err:     at android.view.View$PerformClick.run(View.java:21266)
12-31 15:06:48.525 32314-32314/de.aintlarry.patsch W/System.err:     at android.os.Handler.handleCallback(Handler.java:739)
12-31 15:06:48.525 32314-32314/de.aintlarry.patsch W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:95)
12-31 15:06:48.525 32314-32314/de.aintlarry.patsch W/System.err:     at android.os.Looper.loop(Looper.java:168)
12-31 15:06:48.525 32314-32314/de.aintlarry.patsch W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:5781)
12-31 15:06:48.525 32314-32314/de.aintlarry.patsch W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
12-31 15:06:48.525 32314-32314/de.aintlarry.patsch W/System.err:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:797)
12-31 15:06:48.525 32314-32314/de.aintlarry.patsch W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:687

I dont know where my mistake is!

The Login-Datas are correct and i had permissions for external acces.

Upvotes: 0

Views: 3549

Answers (3)

Priyatam
Priyatam

Reputation: 21

This error is due to a networking problem.:

  1. Declare Internet permission in AndroidManifest file.
  2. Load your connection driver and get the connection in a Background process i.e you have to place your code inAsyncTask class.

Code:

<uses-permission android:name="android.permission.INTERNET" />/*This line in manifest file*/

public class SQLConnect extends AsyncTask<String,Void,String> {
@Override
  protected String doInBackground(String... params) {
     Your Connection code goes hare ..!!
    return "";
}
}

Upvotes: 0

reymalahay
reymalahay

Reputation: 21

If you must really do network operations in the main thread, like establishing a connection, you must modify your AndroidManifest.xml file, i.e. Add this piece of configuration:

<uses-permission android:name="android.permission.INTERNET" />

However, as a best practice, I recommend that you perform such operations outside the main thread. Try using an AsyncTask.

Upvotes: 0

Esteban Herrera
Esteban Herrera

Reputation: 2291

This is likely caused because of the fact that you can't do any networking task on your main thread.

Try making the call asynchronous with: http://developer.android.com/reference/android/os/AsyncTask.html

Or if you have to, avoid this exception by placing the following code on your onViewCreated method or after the setContentView(R.layout.xxx) method:

if (android.os.Build.VERSION.SDK_INT > 9) {
    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
    StrictMode.setThreadPolicy(policy);
}

Upvotes: 1

Related Questions