MySQL JDBC Connection

Moin,

ich kann keine Verbindung mittels Android und JDBC auf mein MySQL Server aufbauen.
Ich bekomme diese Fehlermeldung:

Methode mit der ich die Verbindung zur DB aufbaue:

  {
    TextView tv = (TextView) this.findViewById(R.id.textView1);
    try
    {
      System.out.println("Create Database connection");

      String driver = "com.mysql.jdbc.Driver";
      String url = "jdbc:mysql://XXX.XXX.X.XXX:3306/xxx";
      String username = "root";
      String password = "xxx";
      Class.forName(driver); 

      conn = DriverManager.getConnection(url, username, password);
      System.out.println("Database connection success");

      String result = "Database connection success
";
      Statement st = conn.createStatement();
      ResultSet rs = st.executeQuery("select zeitnr, tnr from rundenzeit LIMIT 0,20");
      ResultSetMetaData rsmd = rs.getMetaData();

      while (rs.next())
      {
        result += rsmd.getColumnName(1) + ": " + rs.getInt(1) + "
";
        result += rsmd.getColumnName(2) + ": " + rs.getInt(2) + "
";
      }
      tv.setText(result);
    }
    catch (Exception e)
    {
      e.printStackTrace();
      tv.setText(e.toString());
    }

  }```

Im libs-Ordner und im Build-Path habe ich die mysql-connector-java-5.1.27-bin.jar Datei eingefügt.

Hat jemand eine Idee was ich evtl. falsch mache?

Wenn ich die gleiche Methode, mit localhost statt der IP (wo die DB draufinstalliert ist) in der url , in einer Java Application starte bekomme ich eine Verbindung und kann auch SQL-Befehle ausführen. 
Nur mit Android bekomme ich keine Verbindung...

In dem Stacktrace fehlt leider der entscheidende Teil. Weiter unten wird “Caused by:…” kommen. Dort steht die ursprüngliche Ursache drinnen. Bis dahin zur Überprüfung:

  • Server gestartet und auch auf der öffentlichen IP horchend? Zu überprüfen mit netstat
  • Firewall auf Server lässt Verbindungen auf Port 3306 zu?
  • Öffentliche IP überhaupt über das Netzwerk erreichbar? IP angepingt, falls das mit Android überhaupt geht.

[QUOTE=nillehammer]In dem Stacktrace fehlt leider der entscheidende Teil. Weiter unten wird “Caused by:…” kommen. Dort steht die ursprüngliche Ursache drinnen. Bis dahin zur Überprüfung:

  • Server gestartet und auch auf der öffentlichen IP horchend? Zu überprüfen mit netstat
  • Firewall auf Server lässt Verbindungen auf Port 3306 zu?
  • Öffentliche IP überhaupt über das Netzwerk erreichbar? IP angepingt, falls das mit Android überhaupt geht.[/QUOTE]

Server gestartet? Ja.
Server lässt Verbindung auf Port 3306 zu? Firewall komplett deaktiviert.
Server überhaupt über das Netzwerk erreichbar? Ja mit mit dem Smartphone die Adresse angepingt, Antwort erhalten.

Ist auf dem Screenshot etwas schwer zu erkennen. Aber, wenn man nach “android.os.NetworkOnMainThreadException” sucht, findet man, dass Netzwerkoperationen auf dem main-Thread unter Android nicht erlaubt sind. Als Lösungen werden separate Threads/Tasks genannt. Das nur als Hinweis für weitere Nachforschungen. Ich kann mangels Android-Kenntnissen nicht mehr dazu schreiben (vor allem nicht, wie man es richtig macht).

P.S. Gerade noch gefunden: Starte einen AsyncTask für die Verbindung zur DB. Verboten ist es auf dem main-Thread wohl, weil Netzwerkoperationen dort die GUI blockieren würden.

Allerdings sollte man aus Sicherheitsgründen nie direkt eine Datenbank im Netz freigeben. Eigentlich gehört immer ein Server davor. (Nur so am Rande).

Richtig! Verhindert auch einiges an Kopfschmerzen und man muss für jeden Client nicht den kompletten DB-Code neu schreiben.

Schließe mich hier den Vorrednern an: diese Art von Zugriff auf Datenbanken ist ein potentielle Sicherheitsloch. Das wissen auch die die Macher von Datenbanken weswegen MySQL z.B. in der Standardeinstellung einen Fernzugriff gar nicht erst zulässt. Das musst du schon selber Einstellen und ich würde dir raten: lasse es bleiben. Schalte einen Server dazwischen, der die Anfragen kontrolliert bearbeitet.