MySQL Verbdinung kommt nicht zu stande

  • Hallo zusammen


    Da bin ich wieder. Ich hoffe dieses mal liegt es nicht nur an der Schreibweise xD


    Ich will mein App mit meinem MySQL Server im Netzwerk verbinden.
    Es ist eine MySQL Datenbank welche auf meinem Synology NAS läuft. Die Datenbank ist erstellt und mit einem, aus dem I-Net gefischten Tool, auch auf erreichbarkeit geprüft worden.
    Die Firewall auf meinem Computer ist deaktiviert und das emulierte Andorid L von Android Studio hat auch Internet (Mit dem Browser kann ich Google aufrufen)


    Mir ist bewusst, das ich wegen der Sicherheit über ein php Script gehen sollte. (Habe die anderen Thread zum SQL Server hier gelesen, nebst gefühlten 10 Millionen anderen Threads im Internet zu diesem Thema :)), aber die App wird ausschliesslich für mich laufen, von dem her ist es nicht so wichtig :) Zudem sind es keine sesiblen Daten und wenn sie jemand löschen sollte, ist es mir auch egal.



    Ich will vorerst nicht mal etwas auslesen, ich will nur eine Verbidnung aufbauen, aber nichtmal das klappt :(


    Code:



    Fehlermeldung:
    Communications link failure


    The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.





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


    Habe ich auch in die Mainifext geschrieben. Benutzt wird JDBC v. 5.1.31.


    Aktuelles Snippet habe ich von hier:
    http://stackoverflow.com/quest…ection-with-drivermanager
    Und bei dem scheint es ja nach dem richtigen setzen der Rechte zu funktionieren, aus diesem Grund gehe ich auch absichtlich mit root drauf (Testweise), da sollte ich auch alle Rechte haben.


    Was kann da falsch sein? :/


    Gruss Black Rider

  • Hallo Black Rider und Willkommen im Forum.


    Was sein kann ist, dass deine Datenbank generell alle eingehenden Verbindungen blockt. Dies beinhaltet dann natürlich auch den root-User. Das trifft man häufig bei Webserveranbietern an. Am besten dahingehend nochmal deine Datenbankeinstellungen je nach Hersteller bzw. Typ überprüfen.


    Ansonten ist der Quellcode ja eins zu eins bis dahingehend, dass das newInstance in Zeile 18 fehlt.


    P.S.: Bitte trotz privater Nutzung nie Serverdaten preisgeben!

    MfG,
    Christopher


    Eine gewisses Maß an Freundlichkeit kann man auch von Menschen im Internet erwarten.
    Das Forum basiert komplett auf der Freiwilligkeit ihrer Nutzer und diese sollen sich wohlfühlen! Daher seid bitte freundlich. Danke

  • Zitat


    da sollte ich auch alle Rechte haben.


    Annahme oder Gewissheit ?


    Schau doch mal mit dem phpymyAdmin auf deine Nas und prüfe was root alles darf.


    Standard mässig habe ich für root nur lokalen Zugriff ( Synology NAS hat ja seit einiger Zeit MariaDB) drauf


    root 127.0.0.1 Nein ALL PRIVILEGES Ja Rechte ändern Rechte ändern Exportieren Exportieren
    root ::1 Nein ALL PRIVILEGES Ja Rechte ändern Rechte ändern Exportieren Exportieren
    root kpnas Nein ALL PRIVILEGES Ja Rechte ändern Rechte ändern Exportieren Exportieren
    root localhost Nein ALL PRIVILEGES Ja Rechte ändern Rechte ändern Exportieren Exportieren



    Wie du siehst fehlt da der "any" Host Eintrag


    root % Ja ALL PRIVILEGES Ja Rechte ändern Rechte ändern Exportieren Exportieren



    Falls der nicht da ist, gibt es auch keinen externen Zugriff.

  • Hallo zusammen


    Danke für die Antworten.


    Um sicherzugehen das mit der Datenbank alles in Ordnung ist, habe ich kurz ein C# Programm geschrieben welches mir von der einen Tabelle den ersten Wert ausliesst. Ihr hattet recht, musste vom root noch die Privilegien für % setzen, dann ging mein C# Programm.
    Mein Java App jedoch leider nicht :(


    Ich habe die newInstance() hinzugefgüt, hat sich nicht geändert.


    Ich gebe aber nicht auf, werde jetzt weiter nach der Lösung suchen.
    Wenn jemand noch einen Tipp hat, nur her damit :D


    Gruss Black Rider


    PS: Danke für die Editierung, war vollkommend richtig, aber ich hatte es schon geändert. Würde als rootpasswort doch nie lulu nehmen xD

  • Konnte enoch bisschen mehr herausfinden. Der Android Device Monitor ist ja auch cool :D



    Eventuell kann jemand etwas damit anfangen. Ich leider nicht.

  • Also ich hab mal folgenden Code bei mir reingehackt.



    mysql-connector-java-5.1.30-bin.jar


    Die LoginDaten sind jetzt nicht wirklich relevant (lokale NAS) (Testuser angelegt, DB mit Namen Test angelegt , 3 Felder id/name/testfeld int )
    Kleine Anmerkung:


    Da ich gerne für "alte" Geräte programmiere, hängt hier an meinem DEV-Rechner noch ein Samsung Galaxy 1 (9001), da läuft noch Android 2.3 drauf.


    Bei neueren Geräten also ANdroid 3 aufwärts dürfte es nötig sein, Datenbank operationen in einen eigene Thread zu kapsel. Zum Beispiel AsyncTask.


    Falls du ein Android 4+ Gerät hast, könnte das die Ursache für den Absturz sein. (Zum Testen kannst du natürlich auch den Strict Mode aktivieren).


    Achso Textview nur zur DummyAusgabe


  • Killphil, vielen vielen Dank :D:D



    Folgendes gemacht:


    • Neuer Emulator mit Android 2.3 erstellt. (Vorher 4.3!! (Fehler))
    • Neues Projekt mit Deinem Code erstellt.
    • Auch in dieses Projekt die Internetpermission + Access_network_start in die Manifest geschrieben
    • MySQL Connector v. 5.1.31 neu heruntergeladen.

    Und was seh ich da im Emulator? Meinen Namen welcher gerade aus der Datenbank gefischt wurde :)


    Wie ich gerade sehe, funktioniert es auf meinem Handy (Samsung Galaxy S3 mit Android 4.3) nicht. Also wird die ganze Sache wirklich gewesen sein, weil es in ein Thread muss. Denn ich hatte vorher immer einen 4.3 Emulator benutzt, wie mein Handy halt.
    Warum das eigtl.? Mag es Android 3.+ nicht wenn der Mainthread durch eine Netzwerkaktion blockiert wird?
    Ich werde mir also morgen mal diesen AsyncTask angucken. Wird ja nix anderes sein, als n Backgroundworker.
    Ich dank Dir nochmal und gn8 :)
    Gruss
    Black Rider

  • Ja das haben sie mit Android 3 eingeführt. Alles was den Gui Thread ausbremst ist böse. Google wollte die Oberflaeche immer responsiv halten. Daher Netzwerkaktionen, lange Berechnungen, lange DB Zugriffe immer in einen Thread... kommunikation zum Gui per Handler. Oder einfacher per AsyncTask. :)

  • Naja, ist ja eigtl. auch nur richtig so. Keine will ein stockendes Handy.


    Ich habe jetzt die ganze Sache in einem AsyncTask gemacht (Coole Sache :D)



    xml so belassen wie beim HelloWorld example vom Android Studio (Also einfach ein TextView drin) und in der AndroidManifest.xml muss das noch rein:


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


    Und dann klappt es, getestet Emulator Version 2.3 / 4.3 und Samsung Galaxy S3 mit v. 4.3


    Killphil nochmals vielen Dank für die Hilfe.


    Jetzt kanns los gehen :)


    Gruss Black Rider

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!