Je travaille à faire parler ma base de données à mes programmes Java.
Quelqu'un peut-il me donner un exemple de programme rapide et sale en utilisant le JDBC?
Je reçois une erreur plutôt prodigieuse:
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 de 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?");
}
}
Réponses:
Donc, vous avez un
Je cite cette réponse qui contient également un tutoriel MySQL + JDBC étape par étape:
Voir également:
la source
J'attrape cette exception lorsque Java sort du tas. Si j'essaie de mettre en mémoire RAM de nombreux éléments de données, j'attrape d'abord « Échec de la liaison de communication » et ensuite « OutOfMemoryError ».
Je l'ai enregistré et je diminue la consommation de mémoire (supprimer 1/2 données) et tout va bien.
la source
Dans mon cas, je devais remplacer Localhost par l'adresse IP réelle du serveur de base de données
Au lieu de
J'ai eu besoin
la source
Cette
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
exception se produit si votre connexion à la base de données est inactive pendant une longue période.Cette connexion inactive renvoie true,
connection.isClosed();
mais si nous essayons d'exécuter une instruction, elle déclenchera cette exception, je proposerai donc de procéder au regroupement de bases de données.la source
J'ai le même problème depuis des heures. J'utilise MAMP Server
Au lieu d'utiliser localhost: [Port Apache], utilisez votre port MySQL.
Ci-dessous se trouve le port MySQL par défaut pour le serveur MAMP.
la source
Il se peut que j'aboie la mauvaise arborescence ici, mais votre exception semble indiquer que votre serveur MySQL n'est pas disponible.
Que se passe-t-il si vous essayez (depuis le terminal)
Vous serez invité à entrer le mot de passe associé au nom d'utilisateur. Après avoir donné le bon mot de passe, le client mysql se connecte-t-il?
Sinon, vous devrez peut-être démarrer MySQL à partir des Préférences. Vous pouvez également le configurer pour qu'il s'exécute au démarrage.
la source
localhost
j'utilise le nom d'utilisateur / mot de passe correct et cela fonctionne très bien.Dans mon cas, il s'est avéré que la version de
mysql-connector-java
était trop ancienne.Dans ma démo, j'utilise en quelque sorte
mysql-connector-java
comme ceci:Mais dans l'environnement de développement, j'utilise ceci:
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.
Puisque la raison est trouvée, la solution est également trouvée. Faites correspondre la version!
la source
J'ai eu la même erreur car j'essayais d'exécuter mon programme sans démarrer le serveur mysql.
Après avoir démarré le serveur mysql, tout s'est bien passé.
la source
Des réponses antérieures sont appropriées. Mais je voudrais également signaler une question plus générique.
J'ai rencontré un problème similaire et la raison était une restriction de réseau de mon entreprise.
La même connexion réussissait lorsque j'étais dans un autre réseau.
la source
Veuillez mettre à jour votre adresse IP dans le fichier /etc/mysql/my.cnf
Redémarrez le démon mysql et les services mysql.
la source
Téléchargez MySQL-JDBC-Type-4-Treiber (ig 'mysql-connector-java-5.1.11-bin.jar' from 'mysql-connector-java-5.1.11.zip') sur Mysql .
Vous devez inclure le fichier jar du pilote pendant la compilation et l'exécution dans votre chemin de classe.
la source
Cette erreur peut également se produire si Java essaie de se connecter à MySQL via SSL, mais quelque chose ne va pas. (Dans mon cas, je configurais des pools de connexions Payara Server 5.193.1 avec MySQL.)
Certaines personnes ont suggéré un réglage
useSSL=false
. Cependant, depuis la version Connector / J8.0.13
, ce paramètre est obsolète. Voici un extrait des propriétés de configuration de MySQL Connector / J 8.0 :Donc, dans mon cas, la configuration
sslMode=DISABLED
était tout ce dont j'avais besoin pour résoudre le problème. C'était sur une machine d'essai. Mais pour la production, la solution sécurisée serait de configurer correctement le client Java et le serveur MySQL pour utiliser SSL.Notez qu'en désactivant SSL, vous devrez peut-être également définir
allowPublicKeyRetrieval=true
. (Encore une fois, pas une sage décision du point de vue de la sécurité). De plus amples informations sont fournies dans MySQL ConnectionString Options :la source
Mon même problème est résolu par les étapes suivantes:
Aller à
my.cnf
Modifier son adresse de liaison
Redémarrez MySQL
la source
Si vous utilisez
WAMP
ou unXAMP
serveur pour installer la base de données mysql. Ensuite, vous devez démarrer explicitement mysql autrement, il s'afficheracom.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
lors de la connexion à la base de donnéesla source
j'ai résolu ce problème facilement, cela a fonctionné pour moi. j'ai eu le problème de seme "com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: échec de la liaison de communication". Dans mon fichier db.properties, 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 cela a fonctionné pour moi .
la source
C'est ce qui m'est arrivé lorsque j'ai changé le port mysql de 3306 à 3307 dans my.ini et les fichiers php.ini mais après avoir changé les ports (3307-> 3306), cela a de nouveau fonctionné correctement.
la source
Si vous avez modifié votre port, vous obtenez ce type d'erreur "com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: échec de la liaison de communication" Veuillez vérifier votre numéro de port
la source
Je viens de vivre cela.
Je dois le faire fonctionner par: (cela peut être placé dans l'initialiseur de bloc statique)
Aussi en obtenant la connexion via:
au lieu de spécifier les paramètres de connexion
Cordialement.
la source
Essayez de passer
localhost
à127.0.0.1
.L'hôte local serait résolu
::1
. Et MySQL ne peut pas être connecté via IPv6 par défaut.Et voici la sortie de
telnet localhost 3306
:Et il n'y a aucune réponse du serveur MySQL.
Bien sûr, assurez-vous que votre serveur MySQL fonctionne.
la source
si mysql version 8 ou supérieure mise à jour par le connecteur utilisateur
la source
Pour un appel à distance vers Mysql
Ajouter un utilisateur distant à Mysql depuis par exemple IP = remoteIP:
Autoriser l'accès à distance à Mysql (par défaut, tous les appels externes ne sont pas autorisés):
Pour la dernière version du pilote JDBC, le JDBC:
la source
J'ai eu le même problème, et voici comment cela a été résolu:
ResultSet (getString("columnName"))
ne correspondant pas aux noms de colonne dans ma base de données.Je ne sais pas exactement lequel a résolu le problème, mais cela a fonctionné. Aussi, assurez - vous que vous créez une nouvelle
Statement
etResultSet
pour chaque requête de table.la source
Cela pourrait être un simple problème de pot. vous utilisez peut-être un ancien
mysql-connector-java-XXX-bin.jar
qui n'est pas pris en charge par votre version actuelle de mysql. J'ai utilisémysql-connector-java-5.1.18-bin.jar
comme j'utilisemysql 5.5
et ce problème est résolu pour moi.la source
Vous n'avez peut-être pas démarré votre serveur Mysql et Apache. Après avoir démarré le serveur Apache et Mysql à partir du panneau de configuration XAMPP, la connexion a été établie avec succès.
Bonne chance!
la source
Ce que j'ai résolu, c'est de faire 2 choses: 1. créer un nouvel utilisateur autre que root avec un mot de passe en utilisant les connads suivants:
2. commentez la ligne d'adresse IP sur mysqld.conf
puis connectez-vous avec un nouveau nom d'utilisateur et un nouveau mot de passe. ça devrait marcher.
la source
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 indique d'utiliser le pilote "com.mysql.cj.jdbc.Driver ou même que vous n'avez pas à spécifier lequel vous utilisez:
J'ai changé la déclaration pour utiliser la version 5.1.38 de mysql-connector-java et, dans le code, j'ai conservé le com.mysql.jdbc.Driver .
Tout a commencé quand j'ai vu la réponse d' Ankit Jain
la source
Mon pare-feu bloquait le post 3307 sur lequel mon écoute MySQL. J'ai donc changé le port de 3307 à 3306. Puis je peux me connecter avec succès à une base de données.
la source
Dans mon MacBook, je n'ai résolu cette erreur que lors de la réinstallation de la nouvelle version d'Eclipse EE et de la suppression des serveurs locaux comme xamp mysql ou mamp mais n'utilisez qu'un seul d'entre eux ...
la source
Dans mon cas, j'ai dû établir un tunnel ssh vers la base de données distante et tous les paramètres étaient corrects et le test de la connexion avec PhpStorm a également réussi. Et aussi le schéma a été chargé, mais pas les données. Au lieu de cela, j'ai eu:
Aucune des suggestions ci-dessus n'a fonctionné. Pour une raison quelconque, j'ai essayé de résoudre le problème en redémarrant simplement PhpStorm et le tour est joué!
la source
Je recevais plusieurs erreurs telles que:
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
.J'ai dû ajouter:
Dans AndroidManifest.xml, insérez
<uses-permission android:name="android.permission.INTERNET"/>
juste après la balise manifeste d'ouverture.Ajoutez le pilote JDBC dans vos dépendances Gradle (ou Maven).
la source