paka Geschrieben 2. September 2010 Geschrieben 2. September 2010 Hallo, ich habe ein Problem damit, die Verbindung zur Datenbank herzustellen. Ich benutze MySQL auf XAMP. Das mache ich, da ich php Programmiere, und da sowieso eine Datenbank ... brauche. Von der Konsole oder mit php ist die Verbindung zur DB auch kein Problem. Jetzt versuche ich meine erste Java Anwendung zu schreiben, die eine DB nutzt, und scheitere (momentan ) an der Verbindung. Google und Foren durchwühlen hat nicht weitergeholfen. Alle Posts mit ähnlicher Fehlermeldung beruhten auf Problemen in Netzwerken, oder wurden nicht gelöst Das ist der Code: try { Class.forName("com.mysql.jdbc.Driver") ; } catch (ClassNotFoundException cnfEx) { System.out.println("Konnte Driver "+ cnfEx.getMessage() + "nicht laden. "); System.exit(1) ; } try { Connection verbMySql = DriverManager.getConnection("jdbc:mysql://localhost/benutzer?user=root&password=pass"); } catch (SQLException sqlEx) { System.out.println("Fehler beim Verbinden mit DB: " + sqlEx.getMessage()) ; sqlEx.printStackTrace(System.out) ; System.exit(1) ; } Und das die Fehlermaldung die er produziert: C:\Users\August\Documents\java SRC\javWorkspace\dbTest\src>java main.Main Fehler beim Verbinden mit DB: 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. com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: 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. at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) at java.lang.reflect.Constructor.newInstance(Unknown Source) at com.mysql.jdbc.Util.handleNewInstance(Util.java:409) at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1118) at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:343) at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2308) at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2122) at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:774) at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:49) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) at java.lang.reflect.Constructor.newInstance(Unknown Source) at com.mysql.jdbc.Util.handleNewInstance(Util.java:409) at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:375) at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:289) at java.sql.DriverManager.getConnection(Unknown Source) at java.sql.DriverManager.getConnection(Unknown Source) at dbHandles.Verbindung.<init>(Verbindung.java:29) at main.Main.main(Main.java:11) Caused by: java.net.ConnectException: Connection refused: connect at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.PlainSocketImpl.doConnect(Unknown Source) at java.net.PlainSocketImpl.connectToAddress(Unknown Source) at java.net.PlainSocketImpl.connect(Unknown Source) at java.net.SocksSocketImpl.connect(Unknown Source) at java.net.Socket.connect(Unknown Source) at java.net.Socket.connect(Unknown Source) at java.net.Socket.<init>(Unknown Source) at java.net.Socket.<init>(Unknown Source) at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:256) at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:292) ... 15 more Ich hab einfach mal alles geposted, auch wenn ich vermute, dass die ersten Reihen ausreichen. Die MySQL Version ist 5.1.41 . Der jdbc Driver ist die Version: Connector/J 5.1.13 Mein erster Verdacht ist, dass die beiden vieleicht nicht zusammenpassen, da ich XAMP schon vor einem 3/4 Jahr installiert habe, den Driver aber erst heute runtergeladen habe. Leider habe ich weder by Mysql noch sonstwo im Netz was zur Kompatibilität der Treiber mit den Mysql Versionen gefunden. Ach ja. Passwort und User stimmen (wurden zig mal getestet). Schon mal danke, an alle die sich mit dem Problem (insbesondere mit dem stack trace) auseinandersetzen. LG Paka Zitieren
kingofbrain Geschrieben 2. September 2010 Geschrieben 2. September 2010 (bearbeitet) Für mich hört sich das auch nach einer Inkompatibilität zwischen Treiber und Datenbank an. Versuch mal die anderen GA-Versionen des JDBC-Treibers. Ich würde auf eine 5.0.x Version tippen. [EDIT] Oder aber es ist der Port der Datenbank. Gib den mal mit an. Ich habe momentan hier beim Kunden keine MySQL, mit der ich den Fehler nachstellen könnte. Aber ich hatte den auch schon ein paar Mal. Ist also nichts schlimmes, geht nur nicht. [/EDIT] Schöne Grüße, Peter Bearbeitet 2. September 2010 von kingofbrain Zitieren
paka Geschrieben 2. September 2010 Autor Geschrieben 2. September 2010 Hallo Peter, der Port ist 3306. Eine andre version des Treibers werde ich jetzt mal testen. Danke für die flotte Antwort Chiao Paka Zitieren
paka Geschrieben 2. September 2010 Autor Geschrieben 2. September 2010 Mit dem mysql-connector-java-5.0.8 (das war der einzige mit 5.0.x) klappt es auch nicht. Imerhin wird die Fehlermeldung übersichtlicher. Also dann erhalte ich die Meldung: C:\Users\August\Documents\java SRC\javWorkspace\dbTest\src>java main.Main com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception: ** BEGIN NESTED EXCEPTION ** java.net.ConnectException MESSAGE: Connection refused: connect STACKTRACE: java.net.ConnectException: Connection refused: connect at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.PlainSocketImpl.doConnect(Unknown Source) at java.net.PlainSocketImpl.connectToAddress(Unknown Source) at java.net.PlainSocketImpl.connect(Unknown Source) at java.net.SocksSocketImpl.connect(Unknown Source) at java.net.Socket.connect(Unknown Source) at java.net.Socket.connect(Unknown Source) at java.net.Socket.<init>(Unknown Source) at java.net.Socket.<init>(Unknown Source) at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:256) at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:271) at com.mysql.jdbc.Connection.createNewIO(Connection.java:2771) at com.mysql.jdbc.Connection.<init>(Connection.java:1555) at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:285) at java.sql.DriverManager.getConnection(Unknown Source) at java.sql.DriverManager.getConnection(Unknown Source) at dbHandles.Verbindung.<init>(Verbindung.java:36) at main.Main.main(Main.java:11) ** END NESTED EXCEPTION ** Last packet sent to the server was 0 ms ago. at com.mysql.jdbc.Connection.createNewIO(Connection.java:2847) at com.mysql.jdbc.Connection.<init>(Connection.java:1555) at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:285) at java.sql.DriverManager.getConnection(Unknown Source) at java.sql.DriverManager.getConnection(Unknown Source) at dbHandles.Verbindung.<init>(Verbindung.java:36) <---------- Zeile 36 Aufruf von getConnenct() at main.Main.main(Main.java:11) <----------------------------- Zeile 11 main: Aufruf des Codes aus dem 1. Post Leise kann ich damit auch nicht mehr anfangen:( LG Paka Zitieren
flashpixx Geschrieben 2. September 2010 Geschrieben 2. September 2010 java.net.ConnectException MESSAGE: Connection refused: connect Die Meldung ist doch eindeutig! Die typischen Fragen sind: An welche IP und Port ist der Dienst gebunden? Wie sehen passende Firewallregeln aus? Stimmen ggf. die Routen zwischen Client und Server ( es nützt nichts, wenn der Client den Server connecten kann, aber z.B. ein Router die Daten vom Server nicht zum Client leiten kann)? etc.... Zitieren
paka Geschrieben 2. September 2010 Autor Geschrieben 2. September 2010 Hallo flashpixx, mysql nutzt den Port 3306. Die IP von localhost ist (zitat aus C:\Windows\System32\drivers\etc\hosts ) ::1 localhost ist auch der einzige dort eingetragene Host. Beim stöbern im Netz ist mir aufgefallen, dass localhost sonst anscheinend meist die IP 127.0.0.1 hat. Keine Ahnung ob da was nicht stimmt. Ich nutze XAMP auf dem Rechner, und das Programm läuft ja auf dem selben, deshalb hab ich mir um die Firewall keine Gedanken gemacht. Es liegt also auch kein Router zwischen Client und Server. Imo dürfte dann die Verbindung mit php auch nicht funktionieren. Kannst du vielleicht erklären was du mit etc... noch so alles meinst. Vielen Dank Paka Zitieren
flashpixx Geschrieben 2. September 2010 Geschrieben 2. September 2010 mysql nutzt den Port 3306. Die IP von localhost ist (zitat aus C:\Windows\System32\drivers\etc\hosts ) ::1 localhost ist auch der einzige dort eingetragene Host. Beim stöbern im Netz ist mir aufgefallen, dass localhost sonst anscheinend meist die IP 127.0.0.1 hat. Keine Ahnung ob da was nicht stimmt. 127.0.0.1 ist eine IPv4 und die ::1 eine IPv6 Adresse. Du musst eben wissen, an welche der Dienst gebunden ist und über welche Du connectest Zitieren
paka Geschrieben 3. September 2010 Autor Geschrieben 3. September 2010 Danke für die Antwort Du musst eben wissen, an welche der Dienst gebunden ist und über welche Du connectest Wie erfahre ich das denn? Sorry, aber ich weiß hier echt nicht, wie ich ansetzten soll. LG Paka Zitieren
flashpixx Geschrieben 3. September 2010 Geschrieben 3. September 2010 Wie erfahre ich das denn? Sorry, aber ich weiß hier echt nicht, wie ich ansetzten soll. Schau dafür in die Konfiguration des Dienstes oder verwende ein Tool wie "netstat" Zitieren
etreu Geschrieben 7. September 2010 Geschrieben 7. September 2010 Füge doch einfach mal folgende Zeile in hosts-Datei ein: 127.0.0.1 mysqld-lokal und ersetze localhost durch mysql-lokal beim Aufruf von getConnection. Zitieren
paka Geschrieben 7. September 2010 Autor Geschrieben 7. September 2010 Hallo, erst mal an etreu: Das hat geklappt , es kann also weitergehen. Jetzt würde mich ehrlich gesagt nur noch interessieren, warum. Wenn ich das richtig verstanden habe, dann rufe ich jetzt die andre IP auf. Also war hier die falsche IP eingetragen, oder wie soll ich das verstehen? Andererseits frage ich mich dann, warum ich im Browser mit http://localhost]Fachinformatiker.de... auf die richtige Seite komme. Jetzt noch an flshpixx: Ich habe versucht mit netstat hinter das Problem zu kommen, bin aber nicht wirklich weiter gekommen. Du hast da bei mir ein Wissen im Bezug auf Netzwerk etc vorausgesetzt, mit dem ich leider nicht dienen kann . Wenn du da noch eine Erklärung nachschieben könntest, oder einen schlauen Link weißt, wäre ich mehr als dankbar. Vielen dank an euch 2 und alle, die sich vielleicht noch Gedanken gemacht haben. LG Paka Zitieren
flashpixx Geschrieben 7. September 2010 Geschrieben 7. September 2010 @etreu: Ich wollte eigentlich dass er selbst auf die Lösung kommt :-P Erklärung: Du hast in Deiner Host stehen: ::1 localhost Wenn Du in irgendeinen Programm nun eben eine Verbindung zu localhost aufbaust, dann schau der Rechner nach wie die IP dieses Names ist, in Deinem Fall ::1 und baut nun dorthin eine Verbindung auf. In Deinem Fall auf die IPv6 Adresse ::1 Dein mySQL Dienst bindet sich aber an die IP Adresse 127.0.0.1, eine IPv4 Adresse. Da der Client eben die IPv6 verwendet kann er keine Verbindung zum Dienst aufbauen, da der auf der IPv4 Adresse hört, also kommt zurecht "Connection failed" Es gibt mehrere Lösungen für das Problem: In dem genannten Fall hast Du einfach eine IPv4 Adresse 127.0.0.1 mit dem Namen "mysqld-lokal" eingetragen, d.h. wenn Du nun eine Verbindung zu "mysqld-lokal" aufbaust, liefert er korrekt die 127.0.0.1 und da der Dienst auf dieser Adresse hört, kommt die Verbindung zustande. Alternativ könntest Du auch direkt die Verbindung zu 127.0.0.1 aufbauen, d.h. Du brauchst den Eintrag in der Datei nicht. Oder Du konfigurierst den mySQL Dienst so, dass er sowohl auf der IPv4 127.0.0.1, wie auch auf der IPv6 ::1 gebunden wird Deshalb mein Hinweis zu dem Programm "netstat", das Dir eben ausgeben kann, welcher Dienst an welche Adresse und welchen Port gebunden sind. Damit hättest Du sehen müssen, dass der mysql-Dämon eben an eine IPv4 Adresse gebunden ist, nachdem Du die Einträge Deiner host-Datei anschaust, hätte klar sein müssen, dass eben die beiden Adresse nicht zueinander passen. Generell: Du solltest Dich schon mit den Grundlagen der Netzwerkkommunikation auskennen, wenn Du mit solchen Sachen arbeitest. Zitieren
paka Geschrieben 7. September 2010 Autor Geschrieben 7. September 2010 Hallo, erstmal danke für die Erklärung. Der Tipp mit netstat war bestimmt gut, nur ist es mir nie gelungen, einen der Einträge mit dem mysql Dienst in Verbindung zu bringen. Ich denke, genau das hätte ich aber tun müssen. Daher konnte ich auch nie nachweisen, dass das Problem tatsächlich hier lag. Der einzige Anhaltspunkt, um die Einträge zuzuordnen, war die PID. Diese kenne ich für den mysql-Dienst aber nicht, und weiß auch nicht, wie ich die rauskriege. Mir war schon klar, dass du mir auf die Sprünge helfen wolltest, und dass es wahrscheinlicher einfacher für dich gewesen wäre, nur die Lösung zu posten. Ich hab deshalb auch erst mal alleine weiter gemacht, und versucht den Kram zu lösen, statt einfach weiter zu fragen. Aber wirklich weiter bin ich nicht gekommen Selbst jetzt bin ich da noch nicht weiter gekommen. Aber ich werd dranbleiben. Also nochmal danke LG Paka Zitieren
flashpixx Geschrieben 7. September 2010 Geschrieben 7. September 2010 Der einzige Anhaltspunkt, um die Einträge zuzuordnen, war die PID. Diese kenne ich für den mysql-Dienst aber nicht, und weiß auch nicht, wie ich die rauskriege. Unter Linux nimmt man dafür "ps" und soweit wie ich weiß kann man die PID unter Windows im Taskmanager ablesen und über beides erhält man auch den Klartextnamen Zitieren
etreu Geschrieben 8. September 2010 Geschrieben 8. September 2010 (bearbeitet) Unter Windows gibt es dafür die sysinternals Tools. Du kannst dir die PID besorgen und schauen welche Ports der Prozess belegt. Unter Linux würde ich dafür auch noch lsof benutzen. EDIT: Der Eintrag in der hosts-Datei war nur zum finden des Symptoms gedacht und sollte von dir nicht als Lösung angesehen werden. Bearbeitet 8. September 2010 von etreu Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.