Reputation: 29
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
Reputation: 21
This error is due to a networking problem.:
AsyncTask
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
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
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