J'ai beaucoup lu sur cette exception, mais je ne peux pas résoudre mon problème.
Le serveur Mysql fonctionne.
Je peux me connecter à partir de NetBeans, mais je ne peux pas me connecter à partir de code Java.
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:57)
at Sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.Java:45)
at Java.lang.reflect.Constructor.newInstance(Constructor.Java:525)
at com.mysql.jdbc.Util.handleNewInstance(Util.Java:411)
at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.Java:1116)
at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.Java:344)
at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.Java:2332)
at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.Java:2369)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.Java:2153)
at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.Java:792)
at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.Java:47)
at Sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at Sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.Java:57)
at Sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.Java:45)
at Java.lang.reflect.Constructor.newInstance(Constructor.Java:525)
at com.mysql.jdbc.Util.handleNewInstance(Util.Java:411)
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.Java:381)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.Java:305)
at Java.sql.DriverManager.getConnection(DriverManager.Java:579)
at Java.sql.DriverManager.getConnection(DriverManager.Java:243)
at javaapplication3.JavaApplication3.main(JavaApplication3.Java:32)
Caused by: Java.net.SocketException: Permission denied: connect
at Java.net.DualStackPlainSocketImpl.connect0(Native Method)
at Java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.Java:69)
at Java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.Java:339)
at Java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.Java:200)
at Java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.Java:182)
at Java.net.PlainSocketImpl.connect(PlainSocketImpl.Java:157)
at Java.net.SocksSocketImpl.connect(SocksSocketImpl.Java:391)
at Java.net.Socket.connect(Socket.Java:579)
at Java.net.Socket.connect(Socket.Java:528)
at Java.net.Socket.<init>(Socket.Java:425)
at Java.net.Socket.<init>(Socket.Java:241)
at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.Java:257)
at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.Java:294)
... 15 more
Java Result: 1
J'attrape cette exception avec n'importe quel moyen de se connecter à Mysql à partir de code Java, mais de MysqlWorkBench et de NetBeans est OK .. Je n'ai pas de pare-feu. J'ai essayé 127.0.0.1, le résultat est le même.
Le problème est principalement dû au fait que le service MySQL n’a pas été démarré, assurez-vous qu’il fonctionne, sinon exécutez ce CMD avec des privilèges d’administrateur pour le démarrer:
sc start [Your MySQL Service name]
essayez de spécifier le port dans
conn = DriverManager.getConnection("jdbc:mysql://localhost/mysql?"
+ "user=root&password=onelife");
Je pense que vous devriez avoir quelque chose comme ça:
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mysql?"
+ "user=root&password=onelife");
également le numéro de port dans mon exemple (3306) c'est le port par défaut vous pouvez le changer pendant l'installation de mysql
Et je pense que le meilleur moyen de spécifier un mot de passe et un utilisateur distinct de l’url est le suivant:
connection = DriverManager.getConnection(url, login, password);
Rechercher dans le fichier my.cnf et commenter la ligne
skip-networking
à
#skip-networking
Redémarrer mysql
Ce problème a été résolu avec les nouveaux connecteurs mysql. Veuillez utiliser http://mvnrepository.com/artifact/mysql/mysql-connector-Java/5.1.38
J'avais l'habitude d'obtenir cette erreur après la mise à jour du fichier jar du connecteur, problème résolu.
Essayez les suggestions suivantes:
1) votre machine peut avoir une adresse IP statique; mappez cette adresse IP dans le fichier hosts
à localhost
.
2) essayez de vous connecter depuis un ordinateur ou depuis le réseau via la commande mysql
; Si la connexion aboutit, cela signifie que mysql fonctionne correctement.
Il y a deux choses
Désactivez le pare-feu, ajoutez une exception ou vérifiez si vous avez le bon fichier de pilote. Désactiver les antivirus éventuels
et assurez-vous également que votre type de pilote est mysql.jdbc.driver
.
Il semble que votre code Java utilisant IPv6 au lieu de IPv4, essayez d’utiliser 127.0.0.1 au lieu de localhost. Ex: votre chaîne de connexion doit être comme ci-dessous
jdbc:mysql://127.0.0.1:3306/expeditor?zeroDateTimeBehavior=convertToNull&user=root&password=onelife
P.S: chaîne de connexion de l'URL de mise à jour