wake-up-neo.com

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Kommunikationsverbindungsfehler

Ich arbeite daran, dass meine Datenbank mit meinen Java-Programmen kommuniziert.

Kann mir jemand mit JDBC ein schnelles und schmutziges Beispielprogramm geben?

Ich bekomme einen ziemlich erstaunlichen Fehler:

Exception in thread "main" 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(NativeConstructorAccessorImpl.Java:39)
    at Sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.Java:27)
    at Java.lang.reflect.Constructor.newInstance(Constructor.Java:513)
    at com.mysql.jdbc.Util.handleNewInstance(Util.Java:409)
    at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.Java:1122)
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.Java:2260)
    at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.Java:787)
    at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.Java:49)
    at Sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at Sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.Java:39)
    at Sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.Java:27)
    at Java.lang.reflect.Constructor.newInstance(Constructor.Java:513)
    at com.mysql.jdbc.Util.handleNewInstance(Util.Java:409)
    at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.Java:357)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.Java:285)
    at Java.sql.DriverManager.getConnection(DriverManager.Java:582)
    at Java.sql.DriverManager.getConnection(DriverManager.Java:207)
    at SqlTest.main(SqlTest.Java:22)
Caused by: 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(NativeConstructorAccessorImpl.Java:39)
    at Sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.Java:27)
    at Java.lang.reflect.Constructor.newInstance(Constructor.Java:513)
    at com.mysql.jdbc.Util.handleNewInstance(Util.Java:409)
    at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.Java:1122)
    at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.Java:344)
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.Java:2181)
    ... 12 more
Caused by: Java.net.ConnectException: Connection refused
    at Java.net.PlainSocketImpl.socketConnect(Native Method)
    at Java.net.PlainSocketImpl.doConnect(PlainSocketImpl.Java:333)
    at Java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.Java:195)
    at Java.net.PlainSocketImpl.connect(PlainSocketImpl.Java:182)
    at Java.net.SocksSocketImpl.connect(SocksSocketImpl.Java:432)
    at Java.net.Socket.connect(Socket.Java:529)
    at Java.net.Socket.connect(Socket.Java:478)
    at Java.net.Socket.<init>(Socket.Java:375)
    at Java.net.Socket.<init>(Socket.Java:218)
    at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.Java:256)
    at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.Java:293)
    ... 13 more

Inhalt der Testdatei:

import com.mysql.jdbc.*;
import Java.sql.Connection;
import Java.sql.DriverManager;
import Java.sql.PreparedStatement;
import Java.sql.ResultSet;
import Java.sql.SQLException;
import Java.sql.Statement;

public class SqlTest {

    public static void main(String [] args) throws Exception {
        // Class.forName( "com.mysql.jdbc.Driver" ); // do this in init
        // // edit the jdbc url 
        Connection conn = DriverManager.getConnection( 
            "jdbc:mysql://localhost:3306/projects?user=user1&password=123");
        // Statement st = conn.createStatement();
        // ResultSet rs = st.executeQuery( "select * from table" );

        System.out.println("Connected?");
    }
}
163
Josh K

Du hast also eine 

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Kommunikationsverbindungsfehler
Java.net.ConnectException: Verbindung abgelehnt

Ich zitiere aus dieser Antwort die auch ein Schritt für Schritt MySQL + JDBC-Tutorial enthält:

Wenn Sie einen SQLException: Connection refused oder Connection timed out oder einen MySQL-spezifischen CommunicationsException: Communications link failure erhalten, bedeutet dies, dass die Datenbank überhaupt nicht erreichbar ist. Dies kann eine oder mehrere der folgenden Ursachen haben:

  1. Die IP-Adresse oder der Hostname in der JDBC-URL ist falsch.
  2. Der Hostname in der JDBC-URL wird vom lokalen DNS-Server nicht erkannt.
  3. Die Portnummer fehlt oder ist in der JDBC-URL falsch.
  4. DB-Server ist inaktiv.
  5. Der DB-Server akzeptiert keine TCP/IP-Verbindungen.
  6. Der DB-Server hat keine Verbindungen mehr.
  7. Zwischen Java und DB werden Verbindungen blockiert, z. eine Firewall oder einen Proxy . 

Um das eine oder das andere zu lösen, befolgen Sie die folgenden Hinweise:

  1. Überprüfen und testen Sie sie mit ping.
  2. Aktualisieren Sie DNS oder verwenden Sie stattdessen die IP-Adresse in der JDBC-URL.
  3. Überprüfen Sie es basierend auf my.cnf von MySQL DB.
  4. Starten Sie die DB.
  5. Überprüfen Sie, ob mysqld ohne den --skip-networking option gestartet wurde.
  6. Starten Sie die Datenbank neu und korrigieren Sie den Code entsprechend, sodass Verbindungen in finally geschlossen werden.
  7. Deaktivieren Sie die Firewall und/oder konfigurieren Sie die Firewall/den Proxy, um den Port zuzulassen/weiterzuleiten. 

Siehe auch:

210
BalusC

Ich fange diese Ausnahme, wenn Java aus dem Heap ist. Wenn ich versuche, in RAM viele Datenelemente einzufügen, fange ich zuerst " Kommunikationsverbindungsfehler " und nächste " OutOfMemoryError " an. 

Ich habe es protokolliert und ich verringere den Speicherverbrauch (lösche 1/2 Daten) und alles ok.

7
user1694306

Diese com.mysql.jdbc.exceptions.jdbc4.CommunicationsException-Ausnahme tritt auf, wenn Ihre Datenbankverbindung längere Zeit inaktiv ist. 

Diese Verbindung im Leerlauf gibt true für connection.isClosed(); zurück, aber wenn wir versuchen, die Anweisung auszuführen, wird diese Ausnahme ausgelöst. Ich werde vorschlagen, mit dem Datenbank-Pooling zu beginnen. 

7
Yogesh Funde

Dies ist die beste Lösung,

 Connection con = DriverManager.getConnection(
 "jdbc:mysql://localhost:3306/DBname", "root", "root");

 Connection con = DriverManager.getConnection(
 "jdbc:mysql://192.100.0.000:3306/DBname", "root", "root");

Ersetzung von Localhost in Ihre IP-Adresse

6
sureshAngamuthu

Ich habe seit Stunden das gleiche Problem. Ich verwende MAMP Server

Anstelle von localhost: [Apache-Port] verwenden Sie Ihren MySQL-Port.

Nachstehend finden Sie den Standard-MySQL-Port für den MAMP-Server.

String url = "jdbc:mysql://localhost:8889/db_name";

Connection conn = DriverManager.getConnection(url, dbUsername, dbPassword);
5

Ich habe hier vielleicht den falschen Baum geläutert, aber Ihre Ausnahme scheint zu bedeuten, dass Ihr MySQL-Server nicht verfügbar ist.

Ausnahme im Thread "main" com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: KommunikationsverbindungsfehlerDas letzte erfolgreich an den Server gesendete Paket war 0 vor Millisekunden. Der Treiber hat keine Pakete vom Server erhalten. beim...

Was passiert, wenn Sie es versuchen (vom Terminal aus) 

mysql -u username -p

Sie werden aufgefordert, das dem Benutzernamen zugeordnete Passwort einzugeben. Nachdem Sie das richtige Kennwort eingegeben haben, stellt der MySQL-Client eine Verbindung her?

Wenn nicht, müssen Sie MySQL möglicherweise über die Voreinstellungen starten. Sie können es auch so einstellen, dass es beim Start ausgeführt wird.

5
Karl Walsh

Frühere Antworten sind angebracht. Ich möchte aber auch auf ein allgemeineres Thema hinweisen.

Ich war mit einem ähnlichen Problem konfrontiert und der Grund war eine Netzwerkeinschränkung meines Unternehmens.

Dieselbe Verbindung wurde erfolgreich, wenn ich in einem anderen Netzwerk war.

3
user3251882

Ich habe den gleichen Fehler erhalten, weil ich versucht habe, mein Programm auszuführen, ohne den mysql-Server zu starten. 

Nach dem Start des MySQL-Servers lief alles richtig.

3
rs2012

Laden Sie MySQL-JDBC-Type-4-Treiber (z. B. 'mysql-connector-Java-5.1.11-bin.jar' von 'mysql-connector-Java-5.1.11.Zip') unter Mysql herunter.

Sie müssen das Treiberglas während des Kompilierens und der Laufzeit in Ihren Klassenpfad einbinden.

Class.forName( "com.mysql.jdbc.Driver" ); // do this in init
// edit the jdbc url 
Connection conn = DriverManager.getConnection( "jdbc:mysql://MyDbComputerNameOrIP:3306/myDatabaseName", username, password );
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery( "select * from table" );
3
stacker

In meinem Fall stellte sich heraus, dass die Version von mysql-connector-Java zu hoch war.

In meiner Demo benutze ich mysql-connector-Java irgendwie so:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-Java</artifactId>
    <version>5.1.9</version>
</dependency>

In der Entwicklungsumgebung verwende ich jedoch Folgendes:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-Java</artifactId>
    <version>5.1.31</version>
</dependency>

Und meine MySQL-Version war 5.1.48 (ja, es ist alt, nur um die Produktversion zu imitieren). Also traf ich den gleichen Fehler.

Da der Grund gefunden wird, wird auch die Lösung gefunden. Passen Sie die Version an!

3
shellbye

Bitte aktualisieren Sie Ihre IP-Adresse in der Datei /etc/mysql/my.cnf

bind-address  = <IP_ADDRESS>

Starten Sie den mysql-Daemon und die mysql-Dienste neu.

3
Sreedhar GS

Wenn Sie WAMP oder XAMP server für die Installation der mysql-Datenbank verwenden, dann müssen Sie mysql sever auf andere Weise explizit starten. Wenn Sie eine Verbindung mit der Datenbank herstellen, wird _____com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure angezeigt

2
xrcwrn

Wenn Sie Ihren Port geändert haben, wird folgende Fehlermeldung angezeigt: "com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Kommunikationsverbindungsfehler" Bitte überprüfen Sie Ihre Portnummer

2
Maheshkumar.V

ich habe dieses Problem auf einfache Weise gelöst, das hat für mich funktioniert. Ich hatte das seme Problem "com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Verbindungsfehler". In meiner db.properties-Datei hatte ich folgendes: url: jdbc: mysql: // localhost: 90/myDB, Entfernte nur die Port-URL, was zu dieser URL führte: urd: jdbc: mysql: // localhost/myDB und das arbeitete für mich.

2
Dario Castro

Mein Problem wird durch folgende Schritte gelöst:

  1. gehe zu my.cnf

    vi /etc/mysql/my.cnf 

  2. ändern Sie seine Bindungsadresse

    "#bind-address = 127.0.0.1"

  3. starten Sie MySQL neu

    Sudo /etc/init.d/mysql restart

2
Haimei

Das ist mir passiert, als ich in meiner.ini und den php.ini-Dateien den mysql-Port von 3306 in 3307 geändert habe, aber nach dem Ändern der Ports (3307-> 3306) funktionierte es wieder einwandfrei. 

2
MrPencil

Ich habe das gerade erlebt.

Muss funktionieren, indem: (Kann in den statischen Blockintializer gestellt werden)

static{ // would have to be surrounded by try catch
    Class.forName("com.mysql.jdbc.Driver");   // this will load the class Driver
}

Auch durch das Herstellen der Verbindung durch:

conn = DriverManager.getConnection(DBURL,<username>,<password>);

anstatt die Login-Parameter anzugeben 

  Connection conn = DriverManager.getConnection( "jdbc:mysql://localhost:3306/projects?user=user1&password=123");

Grüße.

2
mel3kings

Für Remote Anruf an Mysql  

  1. Fügen Sie remote user zu Mysql hinzu, beispielsweise IP = remoteIP:

    mysql -u xxxx -p //local coonection to mysql
    mysql> GRANT ALL PRIVILEGES ON *.* TO 'theNewUser'@'remoteIP' IDENTIFIED BY 'passWord';
    //Query OK, 0 rows affected (xx sec)
    mysql> FLUSH PRIVILEGES;
    //Query OK, 0 rows affected
    
  2. Erlaube Fernzugriff für Mysql (standardmäßig sind alle externen Aufrufe nicht zulässig):

    Edit 
    /etc/mysql/mysql.conf.d/mysqld.cnf    or    /etc/mysql/my.cnf
    Change line:  bind-address = 127.0.0.1   to
                  #bind-address = 127.0.0.1
    Restart Mysql: /etc/init.d/mysql restart
    
  3. Für die neueste Version des JDBC-Treibers gilt der JDBC:

    jdbc.url='jdbc:mysql://remoteIP:3306/yourDbInstance?autoReconnect=true&amp;useUnicode=true&amp;useJDBCCompliantTimezoneShift=true&amp;useLegacyDatetimeCode=false&amp;serverTimezone=UTC'
    jdbc.user='theNewUser'
    
1
Yugerten

In meinem MacBook habe ich diesen Fehler nur behoben, wenn Sie die neue Version von Eclipse EE neu installieren und lokale Server wie xampp mysql for mamp entfernen, aber nur einen von ihnen verwenden.

0
m Piroli

Versuchen Sie, localhost in 127.0.0.1 zu ändern.

Der localhost würde in ::1 aufgelöst werden. MySQL kann standardmäßig nicht über IPv6 verbunden werden.

Und hier ist die Ausgabe von telnet localhost 3306:

$ telnet localhost 3306
Trying ::1...

Es erfolgt keine Antwort vom MySQL-Server.

Vergewissern Sie sich natürlich, dass Ihr MySQL-Server läuft.

0
Haozhe Xie

Es wurde versucht, eine Verbindung zu einer älteren Version von MySQL herzustellen ('Version', '5.1.73' ); Wenn Sie eine neuere Treiberversion verwenden, erhalten Sie eine Fehlermeldung, in der Sie aufgefordert werden, die "com.mysql.cj.jdbc.Driver zu verwenden oder dass Sie nicht angeben müssen, welche Sie verwenden:

Klasse com.mysql.jdbc.Driver'. This is deprecated. The new driver class iscom.mysql.cj.jdbc.Driver 'wird geladen. Der Treiber ist automatisch über SPI registriert und manuelles Laden des Treibers Klasse ist in der Regel nicht erforderlich.

Ich habe die Deklaration geändert, um die Version 5.1.38 von mysql-connector-Java zu verwenden, und im Code habe ich die com.mysql.jdbc.Driver beibehalten.

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-Java</artifactId>
    <version>5.1.38</version>
</dependency>

Alles begann, als ich die Ankit Jain Antwort sah

0
hestellez

In meinem Fall musste ich einen SSH-Tunnel für die entfernte Datenbank einrichten und alle Einstellungen waren korrekt. Die Verbindung mit PhpStorm zu testen war ebenfalls erfolgreich. Und auch das Schema wurde geladen, aber nicht die Daten. Stattdessen bekam ich: 

[08S01] 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.

Keiner der oben genannten Vorschläge hat funktioniert. Aus irgendeinem Grund habe ich versucht, das Problem zu lösen, indem ich einfach PhpStorm neu starte und voila, es hat funktioniert!

0
Tech Nomad

Meine Firewall blockierte den Beitrag 3307, den MySQL abhört. Also habe ich den Port von 3307 auf 3306 geändert. Dann kann ich mich erfolgreich mit einer Datenbank verbinden.

0
Michal Šípek

Ich habe mehrere Fehler erhalten, z. B .:

  • CommunicationsException: Communications link failure
  • Java.lang.NullPointerException: Attempt to invoke interface method 'Java.sql.Statement Java.sql.Connection.createStatement()' on a null object reference at.

Ich musste hinzufügen:

  • Fügen Sie in AndroidManifest.xml <uses-permission Android:name="Android.permission.INTERNET"/> Direkt nach dem öffnenden Manifest-Tag ein.

  • Fügen Sie den JDBC-Treiber Ihren Gradle- (oder Maven-) Abhängigkeiten hinzu.

0
Daniel Segura

Öffnen Sie die Datei /etc/mysql/my.cnf:change unterhalb des Parameters von 

bind-address = 127.0.0.1 to bind-address = 192.168.0.3 #this is your local system IP Address,

Führen Sie den folgenden Befehl in mysql für eine bestimmte IP-Adresse-> aus

grant all privileges on dbname.* to [email protected]'192.168.0.3' IDENTIFIED BY 'dbpassword';                      

Wenn Sie Zugriff auf alle IP-Adressen gewähren möchten, führen Sie den folgenden Befehl aus:

grant all privileges on dbname.* to [email protected]'%' IDENTIFIED BY 'dbpassword'; 
0
ShivBuyya

Ich hatte das gleiche Problem, als ich meine Bewerbung startete. 

Caused by: 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.

Das Problem war, dass die Konfiguration in der mysql-Datei-etc/mysql/mysql.conf.d/mysqld.cnf so war

[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
log-error       = /var/log/mysql/error.log
# By default we only accept connections from localhost
bind-address    = 127.0.0.1
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

Wenn wir also sehen, dass die Bindeadresse auf 127.0.0.1 verweist, können Sie zum Starten Ihrer Anwendung die jdbc: mysql: //127.0.0.1: 3306/pizzeria anstelle von verwenden jdbc: mysql: // localhost: 3306/pizzeria , das den mysql mit der Anwendung oder einer anderen Lösung verbindet, besteht darin, dass Sie die mysql-Konfigurationen in default.oth überprüfen und ändern können wird auch für euch arbeiten.

0
Prakhar Agrawal

Es könnte ein einfaches Glasproblem sein. Möglicherweise verwenden Sie einen alten mysql-connector-Java-XXX-bin.jar, der von Ihrer aktuellen mysql-Version nicht unterstützt wird. Ich habe mysql-connector-Java-5.1.18-bin.jar verwendet, da ich mysql 5.5 verwende, und dieses Problem ist für mich gelöst.

0
Ankit Jain

Möglicherweise haben Sie MySQL und Apache Server nicht gestartet. Nachdem ich den Apache-Server und MySQL von XAMPP Control Panel aus gestartet hatte, wurde die Verbindung erfolgreich hergestellt.

Viel Glück!

0
shivam gupta

Ich habe den gleichen Verbindungsfehler: Das Problem, das ich habe, ist, dass ich MySQL 8.0.15 verwendet habe, aber der Java Connector ist 5.x.x.

Unten steht, wieenter code here ich es behoben habe. 1. Laden Sie die 8.0.15 herunter. aus dem Maven-Repository: https://search.maven.org/search?q=g:mysql%20AND%20a:mysql-connector-Java

  1. Wählen Sie in der Eclipse-IDE unter Explorer mit der rechten Maustaste> Pfad erstellen> Pfad erstellen konfigurieren die Option "Referenzierte Bibliotheken" aus. A. Entfernen Sie die Datei "mysql-connector-5.x.jar". b. Klicken Sie auf "Externe JARs hinzufügen ..." und wählen Sie mysql-connector-Java-8.0.15.jar aus.

Führen Sie es erneut aus, das Problem ist behoben. \

0
Peter Chen

Was für mich gelöst wurde, ist 2 Dinge zu tun: 1. Erstellen Sie einen anderen Benutzer als root mit einigen Kennwörtern mithilfe der folgenden Verbindungen:

CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'newuser'@'localhost';
FLUSH PRIVILEGES;

2. Kommentieren Sie die IP-Adresszeile in mysqld.conf

dann mit neuem Benutzernamen und Passwort verbinden. es sollte funktionieren.

0
Abdul Khalid

Ich hatte das gleiche Problem, und so wurde es behoben:

  1. Meine .jsp ruft Attribute auf, die ich noch nicht im Servlet .__ definiert hatte.
  2. Ich hatte zwei Spaltennamen, die ich durch ResultSet (getString("columnName")) in ein Objekt übergab, das nicht mit den Spaltennamen in meiner Datenbank übereinstimmt.

Ich bin nicht genau sicher, welches Problem behoben wurde, aber es hat funktioniert. Stellen Sie außerdem sicher, dass Sie für jede Tabellenabfrage eine neue Statement und ResultSet erstellen.

0
user3427633