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?");
}
}
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
ouConnection timed out
ou un MySQL spécifiqueCommunicationsException: Communications link failure
, cela signifie que le DB n'est pas accessible du tout. Cela peut avoir une ou plusieurs des causes suivantes:
- adresse IP ou nom d'hôte dans L'URL JDBC est erroné.
- nom D'hôte dans L'URL JDBC N'est pas reconnu par le serveur DNS local.
Le numéro de Port- est manquant ou erroné dans L'URL JDBC.
- serveur DB en panne.
- serveur DB n'accepte pas les connexions TCP/IP.
- DB server est à court de connexions.
- 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:
- vérifier et tester avec
ping
.- rafraîchir DNS ou utiliser L'adresse IP dans JDBC URL à la place.
- vérifier sur la base de
my.cnf
de MySQL DB.- démarrer le DB.
- vérifiez si mysqld est démarré sans le
--skip-networking option
.- redémarrer la base de données et corriger votre code en conséquence qu'il ferme les connexions dans
finally
.- désactiver le pare-feu et/ou configurer le pare-feu/proxy pour autoriser / transmettre le port.
voir aussi:
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.
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.
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.
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);
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
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" );
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é.
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!
veuillez mettre à jour votre adresse IP dans /etc/mysql/my.fichier cnf
bind-address = <IP_ADDRESS>
redémarrez mysql deamon et mysql services.
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.
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.
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
Mon même problème est résolu par les étapes suivantes:
-
aller à mon.cnf
vi /etc/mysql/my.cnf
-
modifier son adresse limite
"#bind-address = 127.0.0.1"
-
redémarrer mysql
sudo /etc/init.d/mysql restart
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.
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.
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
j'ai eu le même problème, et voici comment il a été corrigé:
- My .jsp appelait des attributs que je n'avais pas encore définis dans servlet.
- 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.
ç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.
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.
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.
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
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.
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
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!
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".