COM.mysql.jdbc.exception.jdbc4.CommunicationsException: défaillance du lien de communication

je travaille à obtenir ma base de données pour parler à mes programmes Java.

est-ce que quelqu'un peut me donner un programme d'échantillon rapide et sale en utilisant le JDBC?

je suis plutôt un formidable message d'erreur:

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

contenu du fichier test:

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?");
    }
}
151
demandé sur Eric Leschinski 2010-06-06 09:49:10

26 réponses

donc, vous avez un

com.mysql.jdbc.exception.jdbc4.Exception de communication: défaillance de la liaison de communication

java.net.ConnectException: connexion refusée

je cite de cette réponse qui contient également une étape par étape MySQL+tutoriel JDBC:

si vous obtenez un SQLException: Connection refused ou Connection timed out ou un MySQL spécifique CommunicationsException: Communications link failure , cela signifie que le DB n'est pas accessible du tout. Cela peut avoir une ou plusieurs des causes suivantes:

  1. adresse IP ou nom d'hôte dans L'URL JDBC est erroné.
  2. nom D'hôte dans L'URL JDBC N'est pas reconnu par le serveur DNS local.
  3. Le numéro de Port
  4. est manquant ou erroné dans L'URL JDBC.
  5. serveur DB en panne.
  6. serveur DB n'accepte pas les connexions TCP/IP.
  7. DB server est à court de connexions.
  8. quelque chose entre Java et DB bloque les connexions, par exemple un pare-feu ou un proxy.



Pour résoudre l'un ou l'autre, suivez les conseils suivants:

  1. vérifier et tester avec ping .
  2. rafraîchir DNS ou utiliser L'adresse IP dans JDBC URL à la place.
  3. vérifier sur la base de my.cnf de MySQL DB.
  4. démarrer le DB.
  5. vérifiez si mysqld est démarré sans le --skip-networking option .
  6. redémarrer la base de données et corriger votre code en conséquence qu'il ferme les connexions dans finally .
  7. désactiver le pare-feu et/ou configurer le pare-feu/proxy pour autoriser / transmettre le port.



voir aussi:

195
répondu BalusC 2017-05-23 12:03:05

j'attrape cette exception quand Java sort du tas. Si j'essaie de mettre en RAM de nombreux éléments de données - d'abord je attrape " défaillance de la liaison de communication "et ensuite" "OutOfMemoryError ".

Je l'ai enregistré et je réduis la consommation de mémoire (supprimer 1/2 données) et tout ok.

7
répondu user1694306 2013-05-16 18:40:37

cette exception com.mysql.jdbc.exceptions.jdbc4.CommunicationsException se produit si votre connexion de base de données est inactive pendant longtemps.

cette connexion inactive retourne true sur connection.isClosed(); mais si nous essayons d'exécuter statement alors il va lancer cette exception donc je vais suggérer d'aller avec database pooling.

6
répondu Yogesh Funde 2015-02-26 16:46:53

je me trompe peut-être d'arbre, mais votre exception semble indiquer que votre serveur MySQL n'est pas disponible.

Exception dans thread" main " com.mysql.jdbc.exception.jdbc4.CommunicationsException: Echec de la liaison de communication le dernier paquet envoyé avec succès au serveur était 0 millisecondes plus tôt. Le pilote n'a pas reçu de paquets du serveur. à...

Ce qui se passe si vous essayez (à partir de le terminal)

mysql -u username -p

on vous demandera le mot de passe associé au nom d'utilisateur. Après avoir donner le bon mot de passe le client mysql connect?

vous pouvez avoir à démarrer MySQL à partir des préférences si non. Vous pouvez aussi le lancer au démarrage.

5
répondu Karl Walsh 2010-06-06 10:03:51

j'ai le même problème depuis des heures. J'utilise le serveur MAMP

au lieu d'utiliser localhost:[Apache Port], utilisez votre port MySQL.

ci-dessous est le Port MySQL par défaut pour le serveur MAMP.

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

Connection conn = DriverManager.getConnection(url, dbUsername, dbPassword);
5
répondu Abdul Rahim Mohamad 2015-04-30 02:21:25

C'est la meilleure solution,

 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");

remplacement de Localhost à votre adresse IP

4
répondu sureshAngamuthu 2014-11-04 05:43:48

télécharger MySQL-JDBC-Type-4-Treiber (I. g) mysql-connector-java-5.1.11-bin.pot' de 'mysql-connector-java-5.1.11.zip') Mysql .

vous devez inclure le driver jar pendant la compilation et l'exécution dans votre classepath.

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
répondu stacker 2010-06-06 06:50:38

j'ai eu la même erreur parce que j'essayais d'exécuter mon programme sans démarrer mysql server.

après le démarrage du serveur mysql, tout s'est bien passé.

3
répondu rs2012 2013-04-04 04:53:55

dans mon cas, il s'avère que la version de mysql-connector-java était trop haute.

dans ma démo, j'utilise mysql-connector-java comme ceci:

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

mais dans l'environnement de développement, j'utilise ceci:

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

et ma version MySQL était 5.1.48(oui, elle est ancienne, juste pour imiter la version du produit). J'ai donc rencontré la même erreur.

depuis que la raison est trouvée, la solution est trouvée, aussi. Match de la la version!

3
répondu shellbye 2015-07-02 02:54:08

veuillez mettre à jour votre adresse IP dans /etc/mysql/my.fichier cnf

bind-address  = <IP_ADDRESS>

redémarrez mysql deamon et mysql services.

3
répondu Sreedhar GS 2017-01-20 21:06:21

les réponses Précédentes sont appropriées . Mais , je tiens également à pointer en direction d'une plus générique de l'émission.

j'ai fait face à la même question et la raison était une restriction de réseau de mon entreprise.

même connexion était en train de réussir quand j'étais dans n'importe quel autre réseau.

3
répondu user3251882 2017-01-20 21:11:50

vient de l'expérimenter.

Suis arrivé à le faire fonctionner par: (cela peut être placé dans le bloc statique intializer)

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

également en obtenant la connexion par:

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

au lieu de spécifier les paramètres de connexion

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

Cordialement.

2
répondu mel3kings 2013-05-12 06:59:18

si vous utilisez un serveur WAMP ou XAMP pour installer la base de données mysql. Ensuite, vous devez explicitement commencer mysql sever autre sage il montrera com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure en connexion avec la base de données

2
répondu xrcwrn 2014-11-04 05:19:02

Mon même problème est résolu par les étapes suivantes:

  1. aller à mon.cnf

    vi /etc/mysql/my.cnf

  2. modifier son adresse limite

    "#bind-address = 127.0.0.1"

  3. redémarrer mysql

    sudo /etc/init.d/mysql restart

2
répondu Haimei 2014-11-04 05:44:04

j'ai résolu ce problème d'une manière simple, ce qui a fonctionné pour moi. j'ai eu le même problème "com.mysql.jdbc.exception.jdbc4.CommunicationsException: communication link failure". Dans mon db.fichier de propriétés j'avais ceci: url: jdbc: mysql: / / localhost:90 / myDB, seulement supprimé l'url du port , résultant de cette manière url: jdbc:mysql:/ / localhost / myDB et qui a fonctionné pour moi.

2
répondu Dario Castro 2015-04-16 15:20:06

c'est qui m'est arrivé lorsque j'ai changé le port mysql à partir de 3306 pour 3307 dans mon.ini et le php.les fichiers ini mais après avoir changé les ports (3307->3306) retour, il a fonctionné très bien.

2
répondu MrPencil 2015-05-15 10:08:40

Si vous avez changé de port, vous obtenez ce genre d'erreur "com.mysql.jdbc.exception.jdbc4.CommunicationsException: défaillance du lien de communication" Veuillez vérifier votre numéro de port

2
répondu Maheshkumar.V 2016-02-05 16:42:17

j'ai eu le même problème, et voici comment il a été corrigé:

  1. My .jsp appelait des attributs que je n'avais pas encore définis dans servlet.
  2. j'ai eu deux noms de colonne que je passais dans un objet par ResultSet (getString("columnName")) qui ne correspondaient pas les noms de colonne dans ma base de données.

Je ne sais pas exactement lequel a résolu le problème, mais ça a marché. Aussi, assurez-vous que vous créez un nouveau Statement et ResultSet pour chaque requête de table.

0
répondu user3427633 2014-03-17 05:56:16

ça pourrait être un simple problème de bocal. peut-être utilisez-vous un vieux mysql-connector-java-XXX-bin.jar qui n'est pas supporté par votre version mysql actuelle. j'ai utilisé mysql-connector-java-5.1.18-bin.jar comme j'utilise mysql 5.5 et ce problème est résolu pour moi.

0
répondu Ankit Jain 2014-11-04 05:42:07

essayez de changer localhost en 127.0.0.1 .

localhost serait résolu à ::1 . Et MySQL ne peut pas être connecté via IPv6 par défaut.

Et voici la sortie de telnet localhost 3306 :

$ telnet localhost 3306
Trying ::1...

et il n'y a pas de réponse du serveur MySQL.

bien sûr, s'il vous plaît assurez-vous que votre serveur MySQL est en cours d'exécution.

0
répondu Haozhe Xie 2017-05-18 01:24:51

ce qui a résolu pour moi fait 2 choses: 1. créer un nouvel utilisateur autre que root avec un mot de passe en utilisant les connads suivants:

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

2. commentaire ligne d'adresse IP sur mysqld.conf

puis se connecter avec un nouveau nom d'utilisateur et mot de passe. il devrait fonctionner.

0
répondu Abdul Khalid 2017-08-16 08:06:43

il essayait de se connecter à une ancienne version de MySQL ('version', '5.1.73' ); lorsque vous utilisez une version de pilote plus récente vous obtenez une erreur qui vous dit d'utiliser le "com.mysql.CJ.jdbc.Pilote ou même que vous n'avez pas à préciser lequel vous utilisez:

Chargement de la classe com.mysql.jdbc.Driver'. This is deprecated. The new driver class is com.mysql.CJ.jdbc.Pilote'. Le pilote est enregistrement automatique via le SPI et le chargement manuel du pilote la classe est généralement pas nécessaire.

j'ai changé la déclaration pour utiliser la version 5.1.38 du mysql-connecteur-java et, dans le code, j'ai gardé le com.mysql.jdbc.Conducteur .

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

tout a commencé quand J'ai vu le Ankit Jain réponse

0
répondu manatico 2018-02-12 23:07:13

mon pare-feu bloquait le post 3307 sur lequel mon MySQL écoutait. Donc j'ai changé le port de 3307 à 3306.Ensuite, je peux me connecter avec succès à une base de données.

0
répondu sipekmichal.cz 2018-06-07 06:17:20

S'il y a des lecteurs qui ont rencontré ce problème pour accéder au serveur distant: assurez-vous que le port est ouvert

-1
répondu aclokay 2016-12-28 13:11:34

peut-être que vous n'avez pas démarré votre serveur Mysql et Apache. Après avoir démarré Apache server et Mysql à partir du Panneau de contrôle XAMPP, la connexion a été établie avec succès.

bonne chance!

-1
répondu shivam gupta 2017-07-23 16:04:46

j'ai fait face à la même question sur IntelliJ idée.

pour résoudre le problème de connexion, j'ai dû déconnecter ( + F2 utilisant les liaisons par défaut sur un mac) et reconnecter à nouveau. Il ne suffisait pas d'appuyer sur "rafraîchir".

-3
répondu furins 2017-09-13 13:44:16