MySQL-Connector funktioniert nicht über WLAN -> MacOS

WIng2005

Mitglied
Hallo zusammen,
ich doktere schon den 2 Abend an einem seltsamen Problem herum. Ich nutze XAMPP für MacOS und habe eine kleine DB angelegt. Aus meinem Java-Progamm heraus greife ich bislang problemlos darauf zu, hatte dabei den MAC aber immer am Dok und somit kabelgebundenes LAN. Versuche ich das ganze jetzt jedoch über mein WLAN, bekomme ich keine Verindung zur DB, das Ganze kracht mit gefühlt 1000 Fehlermeldungen weg. Der Catch-Block wird nicht über die GUI behandelt, nur über die Console. Üblicherweise würde das Programm mit Fehlermeldung geschlossen, das passiert nicht.

Java:
private String connectURL = "jdbc:mysql://"+dbIP+":3306/homematixdb";
private String user = "********";
private String pw = "*********";

public MySQLConnector() {

      try {
          DriverManager.setLoginTimeout(3);
          System.out.println(connectURL+" - "+ user+" - "+  pw);  // -> Ausgabe ist korrekt
          this.conn= DriverManager.getConnection(connectURL, user, pw); //-> hier bricht er weg

          this.stmt=this.conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
          this.connected=true;
       } catch (SQLException e) {

           Main.mainFrame.appendTextAreaErrorMessages("->MySQLConnector.INI "+e, true);
           Main.mainFrame.appendTextAreaErrorMessages("->SQLException: "+e.getMessage(),false);
           System.exit(-1);
           this.connected=false;
           Main.mainFrame.appendTextAreaErrorMessages("->MySQLConnector - Database failure", false);
        }
    }//Kontruktor

Fehlerblock in der Console:

Code:
Exception in thread "main" java.lang.StackOverflowError
    at java.base/sun.nio.ch.Net.connect0(Native Method)
    at java.base/sun.nio.ch.Net.connect(Net.java:589)
    at java.base/sun.nio.ch.Net.connect(Net.java:578)
    at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:583)
    at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327)
    
    .
    .
    .
    usw



Versucht habe ich das Ganze über die zugewiesene IP des WLANs und 127.0.0.1. Beides funktioniert nicht.

Schliesse ich den MAC ans LAN an, läuft alles, obwohl ich ja eigentlich nicht im Netzwerk bin, sondern nur lokal bleibe. Ich habe keinerlei Firewalls oder ähnliches am laufen und vermute den Fehler eher beim OS. Hatte jemand hier schonmal ähnliches Verhalten und ggf. eine Lösung?

VG
Steffen
 
Also da würde mich erst einmal deutlich mehr vom Stacktrace interessieren.

StackOverflowError deutet in der Regel darauf hin, dass Du irgend eine Rekursion hast, d.h. Du rufst in einer Schleife immer wieder das Gleiche auf.

Eine mögliche Erklärung könnte sein, dass Du eine Exception bekommst und durch den Aufruf Main.mainFrame,appendTextAreaErrorMessages kommt es erneut zu einem Aufruf vom Konstruktor von MySQLConnector.

So ein Verhalten sollte sich aber am Stacktrace ablesen lassen.
 
Argh... ich bin von dir immer wieder begeistert. Du hast recht: ich lege die Fehlermeldungen in DER DB ab, die ich nicht erreichen kann, um per Webseite einsehen zu können, was für Fehler existieren (im Regelfall verliere ich ab und zu die Verbindung zu kleinen WLAN-ESP32-Modulen, die ich im weiteren Verlauf des Programmes kontaktiere. Deaktiviere ich den Zugriff auf die DB im Fehlerfall, hängt zwar das Programm weiterhin, aber die Fehlermeldungen verschwinden. Mein Fehler. Gebe ich jetzt im Catch-Block den Fehler aus, erhalte ich nur noch:
Java:
com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure

bzw. im TextFeld:

Code:
->MySQLConnector.INI com.mysql.cj.jdbc.exceptions.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.
->SQLException: 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.
->MySQLConnector - Database failure

Somit bekomme ich per WLAN keine Verbingung zur DB, per LAN jedoch schon.
 
Evtl. einmal prüfen, auf welchen Ports die Datenbank hört. Evtl. hört die Datenbank nur auf dem Ethernet Adapter.

Ein anderes Problem könnte sein, dass der Router keine Verbindung zwischen WLAN Geräten zulässt.

Ist aber mit den vorliegenden Informationen nicht zu sagen.
 
Der Port ist die 3306, das müsste für alle gleich sein. Der Zugriff funktioniert komischerweise auch direkt über Localhost nicht. Die DB liegt auf dem gleichen System, wir meine Entwicklungsumgebung und somit auch die App.
 
Mit "Port" meinte er bestimmt nicht den TCP Port, sondern das NIC bzw. die IP Adresse, die dem NIC zugeordnet ist, und auf die der Mysql Prozess bindet.
Mach mal ein netstat -tulpn auf dem System, wo der Mysql Prozess läuft und gucke, auf welche IP der Prozess bindet.
 
Mach mal ein
lsof -i -P | grep LISTEN
oder
netstat -an | grep LISTEN

Statt fem grep LISTEN ginge auch ein grep 3306

Und was dann wichtig ist, ist: Was siehst Du bei dem 3306? Das kann ein *:3306 sein - das wäre gut. Dann wäre der Port 3306 bei allen Interfaces gebunden.
 
tcp46 0 0 .3306 *. LISTEN

Eigentlich müsste es passen *.3306

Ich habe mein Programm gerade noch einmal auf den Server (MacMini, im kabelgebundenen LAN) übertragen...läuft.
 
Interessanterweise bekomme ich jetzt folgende fehlermeldung aus dem catch-block:

java.sql.SQLException: The server time zone value 'CEST' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the 'serverTimezone' configuration property) to use a more specific time zone value if you want to utilize time zone support.

Diesmal hängt auch das Programm nicht, es scheint so, als gäbe es eine Verbindung, die dann aber wieder abgebrochen wird.
 
Zuletzt bearbeitet:

Zurück
Oben