Maison > Questions et réponses > le corps du texte
就是普通的查询mysql数据库的代码:
错误栈如下:
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:526)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1074)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2209)
at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:776)
at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:46)
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:526)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:352)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:284)
at java.sql.DriverManager.getConnection(DriverManager.java:571)
at java.sql.DriverManager.getConnection(DriverManager.java:215)
at testHttpConnection.util.DBUtil.getConn(DBUtil.java:26)
at testHttpConnection.TestMysql.main(TestMysql.java:23)
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:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1074)
at com.mysql.jdbc.MysqlIO.readPacket(MysqlIO.java:675)
at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1078)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2137)
... 13 more
Caused by: java.net.SocketException: Permission denied: recv failed
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:152)
at java.net.SocketInputStream.read(SocketInputStream.java:122)
at com.mysql.jdbc.util.ReadAheadInputStream.fill(ReadAheadInputStream.java:113)
at com.mysql.jdbc.util.ReadAheadInputStream.readFromUnderlyingStreamIfNecessary(ReadAheadInputStream.java:160)
at com.mysql.jdbc.util.ReadAheadInputStream.read(ReadAheadInputStream.java:188)
at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:2494)
at com.mysql.jdbc.MysqlIO.readPacket(MysqlIO.java:599)
... 15 more
PHPz2017-04-18 10:54:26
Laissez-moi partager la solution à cette erreur que j'ai eue auparavant, qui est différente du premier étage :
eclipse中,设置“Default VM arguments”添加:“-Djava.net.preferIPv4Stack=true”
La cause spécifique de l'erreur semble être due à des changements de configuration dans la jvm, qui empêchent la jvm d'obtenir certaines informations via le réseau
PHP中文网2017-04-18 10:54:26
Cela devrait résoudre votre problème :
Solutions à l'échec du lien de communication
Utilisez Connector/J pour vous connecter à la base de données MySQL. Après une exécution prolongée du programme, l'erreur suivante sera signalée :
Échec du lien de communication, le dernier paquet reçu avec succès du serveur était Il y a 🎜> millisecondes. Le dernier paquet envoyé avec succès au serveur remonte à millisecondes.
L'erreur vous demandera également de modifier wait_timeout ou d'utiliser l'attribut autoReconnect de Connector/J pour éviter cette erreur.
Après avoir vérifié certaines informations, j'ai constaté que de nombreuses personnes ont rencontré ce problème. La plupart d'entre elles ont ce problème lorsqu'elles utilisent la méthode du pool de connexions. Il devrait être difficile d'avoir ce problème avec des connexions courtes. La raison de ce problème :
Le "wait_timeout" par défaut du serveur MySQL est de 28 800 secondes ou 8 heures, ce qui signifie que si une connexion est inactive pendant plus de 8 heures, MySQL déconnectera automatiquement la connexion, mais le pool de connexions pense que la connexion Il est toujours valide (car la validité de la connexion n'a pas été vérifiée). Lorsque l'application demande à utiliser la connexion, cela provoquera l'erreur ci-dessus.
Modifiez les paramètres de MySQL. Le wait_timeout maximum est de 31536000 ou 1 an. Ajoutez à my.cnf :
[mysqld]
wait_timeout=31536000
interactive_timeout=31536000
Redémarrez pour prendre effet et doivent être modifiés en même temps.