mySQL Datenbank Connection - bekomme keine Verbindung zur DB

  • Antworten:2
David
  • Forum-Beiträge: 2

29.01.2018, 20:10:40 via Website

Hallo liebe Community!

Ich bin neu hier und habe ein Problem über Android eine Verbindung zu meiner mySQL Datenbank zu bekommen.
Ich hab schon sehr viel darüber gelesen, und eigentlich ist es nicht so schwer, aber ich bekomme es einfach nicht hin, egal was ich versuch.

Ich habe Folgenden Ausgangszustand:
- mySQL Datenbank 5.6
- Volle User Rechte an david mit kommt von % vergeben
- Projekt mit einem Button in Android Studio erstellt
- mysql-connector-java-5.1.45 heruntergeladen und eingebunden
- android.permission.INTERNET und ACCESS_NETWORK_STATE eingebunden
- Class.forName("com.mysql.jdbc.Driver") eingebunden (funktioniert)
- Connection c = DriverManager.getConnection("jdbc:mysql://192.168.1.10:3306/hallo","david","123")
- habe auch schon localhost ... ausprobiert
- auch die URL auszuschreiben ohne ,
- Am Android Emulator und am LG G4 ausprobiert

Folgende Meldung bekomme ich dann:
- SQlExcetion: Could not create connection to database Server
- SQLSate: 08001
- VendorError: 0

Mit der APP SQL Client bekomme ich problemlos die Verbindung zur Datenbank hin.
Wollte jedoch eine eigene APP erstellen.

Ich weiß nicht mehr weit und hoffe das ihr mir helfen könnt.
Über ein Funktionierendes Projekt würde ich mich auch freuen.
Hauptsache ich bekomme endlich die Verbindung hin. :'(

Mit großer Hoffnung und freundlichen Grüßen
David

— geändert am 29.01.2018, 20:42:17 durch Moderator

Kommentieren
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

29.01.2018, 20:38:45 via Website

Hallo David,
normalerweise ist es aus Sicerheitsgründen unüblich, eine App zu erstellen die nativ auf (my)SQL per jdbc auf 3306 zugreift.
Eher hast zu zwischen Datenbank und Server eine (Rest) API bei der du auf dem Endgerät Daten anfragen kannst und der Server die diese z.b. als JSON/XML Formatiert zurückgibt.
Damit kannst du deinen Server auch im Internet laufen lassen und nicht nur im lokalen Netz.

Daher habe ich noch nie direkt mit SQL auf Android gearbeitet. Da das eher keine gänige Praxis ist, findet man auch eher weniger im Internet.
Sind alle nötigen Ports denn offen?

Eventuell ist auch der JDBC Provider garnicht für Android optimiert und macht Networking in keinem anderen Thread.
In dem Fall solltest du dir eine andere Lib suchen oder wie oben empfohlen ganz vom SQL CLient weg kommen.
Zum testen mal den Code einfügen, der erlaubt Networking im Main Thread:

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy); 

— geändert am 29.01.2018, 20:41:23

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Kommentieren
David
  • Forum-Beiträge: 2

02.02.2018, 18:55:35 via Website

Hallo Pascal,

vielen Dank für deine Antwort.

Ich benötige jedoch eine direkte Verbindung zu einem lokalen Server. Und es gibt auch einige Beispiele im netz, aber bei mir funktionieren die irgendwie nicht. Bekomme immer die gleiche Meldung auch mit anderen Driver.

Und das es Funktioniert, zeigt mir ja die APP SQL Client. Die ist schon super, aber ich würde halt gerne eine eigene APP schreiben.

Vielen Dank

David

enter code here
       try {
        Class.forName("com.mysql.jdbc.Driver");
        Connection c = DriverManager.getConnection("jdbc:mysql://192.168.1.10:3306/hallo","david","123");
         Toast.makeText(getApplicationContext(),"DB i.O.", Toast.LENGTH_SHORT).show();
        c.close();

    }
    catch (SQLException e1) {
        //Toast.makeText(getApplicationContext(),e1.toString(), Toast.LENGTH_SHORT).show();
        Toast.makeText(getApplicationContext(),"SQLException: " + e1.getMessage(), Toast.LENGTH_SHORT).show();
        Toast.makeText(getApplicationContext(),"SQLState: " + e1.getSQLState(), Toast.LENGTH_SHORT).show();
        Toast.makeText(getApplicationContext(),"VendorError: " + e1.getErrorCode(), Toast.LENGTH_SHORT).show();
    }
    catch (ClassNotFoundException e) {
        Toast.makeText(getApplicationContext(),e.toString(), Toast.LENGTH_SHORT).show();
    }
Hilfreich?
Kommentieren