com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: error de enlace de comunicaciones

Estoy trabajando para que mi base de datos hable con mis progtwigs Java.

¿Alguien puede darme un progtwig de muestra rápido y sucio usando el JDBC?

Me está dando un error bastante estupendo:

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.(ConnectionImpl.java:787) at com.mysql.jdbc.JDBC4Connection.(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.(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.(Socket.java:375) at java.net.Socket.(Socket.java:218) at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:256) at com.mysql.jdbc.MysqlIO.(MysqlIO.java:293) ... 13 more 

Contenido del archivo de prueba:

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

Entonces, tienes un

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: error de enlace de comunicaciones
java.net.ConnectException: conexión rechazada

Cito de esta respuesta que también contiene un tutorial paso a paso de MySQL + JDBC:

Si obtiene una SQLException: Connection refused o se Connection timed out o una excepción CommunicationsException: Communications link failure específica de MySQL CommunicationsException: Communications link failure , significa que no se puede acceder a la base de datos. Esto puede tener una o más de las siguientes causas:

  1. La dirección IP o el nombre de host en la URL JDBC es incorrecto.
  2. El servidor DNS local no reconoce el nombre de host en JDBC URL.
  3. El número de puerto falta o está incorrecto en la URL JDBC.
  4. El servidor de bases de datos no funciona.
  5. El servidor de BD no acepta conexiones TCP / IP.
  6. El servidor de base de datos se ha quedado sin conexiones.
  7. Algo entre Java y DB está bloqueando las conexiones, por ejemplo, un firewall o proxy.

Para resolver uno u otro, siga los siguientes consejos:

  1. Verifíquelos y pruébelos con ping .
  2. Actualice el DNS o use la dirección IP en la URL JDBC.
  3. my.cnf basado en my.cnf de MySQL DB.
  4. Comienza la base de datos.
  5. Verifique si mysqld se inicia sin la --skip-networking option .
  6. Reinicie la base de datos y corrija su código en consecuencia para que finally cierre las conexiones.
  7. Deshabilite el firewall y / o configure el firewall / proxy para permitir / reenviar el puerto.

Ver también:

  • ¿Cómo debo conectarme a la base de datos / fuente de datos JDBC en una aplicación basada en servlet?
  • ¿Es seguro usar una instancia java.sql.Connection estática en un sistema multiproceso?

Capté esta excepción cuando Java salió de stack. Si trato de poner en la RAM muchos elementos de datos, primero veo ” Error de enlace de comunicaciones ” y luego ” OutOfMemoryError “.

Lo registré y disminuyo el consumo de memoria (elimine 1/2 de datos) y todo está bien.

Podría estar ladrando el árbol equivocado aquí, pero su excepción parece indicar que su servidor MySQL no está disponible.

Excepción en el hilo “main” com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Error de enlace de comunicaciones. El último paquete enviado correctamente al servidor fue hace 0 milisegundos. El controlador no ha recibido ningún paquete del servidor. a…

Qué pasa si lo intentas (desde la terminal)

 mysql -u username -p 

Se le pedirá la contraseña asociada con el nombre de usuario. Después de dar la contraseña correcta ¿se conecta el cliente mysql?

Es posible que deba iniciar MySQL desde las Preferencias si no es así. También puede configurarlo para que se ejecute al inicio.

Esta excepción com.mysql.jdbc.exceptions.jdbc4.CommunicationsException produce si su conexión de base de datos está inactiva durante mucho tiempo.

Esta conexión inactiva devuelve verdadero en connection.isClosed(); pero si tratamos de ejecutar la statement, entonces se activará esta excepción, por lo tanto, sugeriré que vaya con la agrupación de la base de datos.

He estado teniendo el mismo problema durante horas. Estoy usando el servidor MAMP

En lugar de usar localhost: [Apache Port], use su puerto MySQL.

A continuación se muestra el puerto MySQL predeterminado para el servidor MAMP.

 String url = "jdbc:mysql://localhost:8889/db_name"; Connection conn = DriverManager.getConnection(url, dbUsername, dbPassword); 

Esta es la mejor solución,

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

Reemplazo de Localhost a su dirección IP

Descargue MySQL-JDBC-Type-4-Treiber (ig ‘mysql-connector-java-5.1.11-bin.jar’ desde ‘mysql-connector-java-5.1.11.zip’) en Mysql .

Debe inculcar el contenedor del controlador durante la comstackción y el tiempo de ejecución en su classpath.

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

Obtuve el mismo error porque estaba intentando ejecutar mi progtwig sin iniciar el servidor mysql.

Después de iniciar el servidor mysql, todo salió bien.

Actualice su dirección IP en el archivo /etc/mysql/my.cnf

 bind-address =  

Reinicie los servicios de mysql deamon y mysql.

Las respuestas anteriores son apropiadas. Pero, también me gustaría señalar un problema más genérico.

Me enfrenté a un problema similar y la razón fue una restricción de red de mi empresa.

La misma conexión se estaba haciendo exitosa cuando estaba en otra red.

Solo experimenté esto.

Tengo que hacer que funcione por: (esto se puede colocar en el intializador de bloque estático)

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

También al obtener la conexión a través de:

 conn = DriverManager.getConnection(DBURL,,); 

en lugar de especificar los parámetros de inicio de sesión

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

Saludos.

Si está usando WAMP o el servidor XAMP para instalar la base de datos mysql. Luego, debe iniciar explícitamente el com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure mysql, de lo contrario, mostrará com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure al conectarse con la base de datos

Mi mismo problema se resuelve siguiendo los siguientes pasos:

  1. ve a mi.cnf

    vi /etc/mysql/my.cnf

  2. modificar su dirección de enlace

    "#bind-address = 127.0.0.1"

  3. reiniciar mysql

    sudo /etc/init.d/mysql restart

Resolví este problema de una manera fácil, eso funcionó para mí. tuve el problema similar “com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: error de enlace de comunicaciones”. En mi archivo db.properties tuve esto: url: jdbc: mysql: // localhost: 90 / myDB, solo eliminé la url del puerto, dando como resultado url: jdbc: mysql: // localhost / myDB y eso funcionó para mí .

Eso me pasó cuando cambié el puerto mysql de 3306 a 3307 en my.ini y los archivos php.ini, pero después de cambiar los puertos (3307-> 3306), volvió a funcionar bien.

En mi caso, resultó ser que la versión de mysql-connector-java era mysql-connector-java alta.

En mi demostración, de alguna manera uso mysql-connector-java esta manera:

  mysql mysql-connector-java 5.1.9  

Pero en el entorno de desarrollo, uso esto:

  mysql mysql-connector-java 5.1.31  

Y mi versión de MySQL era 5.1.48 (sí, es vieja, solo para imitar la versión del producto). Entonces encontré el mismo error.

Como se encuentra el motivo, también se encuentra la solución. ¡Coincide con la versión!

Si cambió su puerto, obtiene este tipo de error “com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Error de enlace de comunicaciones” Compruebe su número de puerto

Tuve el mismo problema, y ​​así es cómo se solucionó:

  1. Mi .jsp llamaba atributos que aún no había definido en el servlet.
  2. Tenía dos nombres de columna que estaba pasando a un objeto a través de ResultSet (getString("columnName")) que no coincidía con los nombres de columna en mi base de datos.

No estoy seguro de cuál resolvió el problema, pero funcionó. Además, asegúrese de crear un nuevo Statement y ResultSet para cada consulta de tabla.

Podría ser un simple problema jar. Puede ser que esté usando un antiguo mysql-connector-java-XXX-bin.jar que no es compatible con su versión actual de MySQL. utilicé mysql-connector-java-5.1.18-bin.jar porque estoy usando mysql 5.5 y este problema se resolvió para mí.

Intenta cambiar localhost a 127.0.0.1 .

El servidor local estaría resuelto a ::1 . Y MySQL no se puede conectar a través de IPv6 de forma predeterminada.

Y aquí está la salida de telnet localhost 3306 :

 $ telnet localhost 3306 Trying ::1... 

Y no hay respuesta del servidor MySQL.

Por supuesto, asegúrese de que su servidor MySQL se esté ejecutando.

Lo que resolví para mí es hacer dos cosas: 1. crear un nuevo usuario que no sea root con alguna contraseña usando las siguientes conexiones:

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

2. comentar la línea de dirección IP en mysqld.conf

luego conéctese con un nuevo nombre de usuario y contraseña. deberia de funcionar.

Intentaba conectarse a una versión anterior de MySQL (‘versión’, ‘5.1.73’); cuando utiliza una versión de controlador más reciente, recibe un error que le indica que use el “com.mysql.cj.jdbc.Driver” o incluso que no tenga que especificar cuál utiliza:

Cargando la clase com.mysql.jdbc.Driver'. This is deprecated. The new driver class is com.mysql.jdbc.Driver'. This is deprecated. The new driver class is com.mysql.jdbc.Driver'. This is deprecated. The new driver class is com.mysql.cj.jdbc.Driver ‘. El controlador se registra automáticamente a través del SPI y la carga manual de la clase de controlador generalmente no es necesaria.

Cambié la statement para usar la versión 5.1.38 de mysql-connector-java y, en el código, guardé el com.mysql.jdbc.Driver .

  mysql mysql-connector-java 5.1.38  

Todo comenzó cuando vi la respuesta de Ankit Jain

Mi firewall estaba bloqueando la publicación 3307 en la que escuchaba mi MySQL. Así que cambié el puerto de 3307 a 3306. Luego puedo conectarme con éxito a una base de datos.

Si hay lectores que encontraron este problema para acceder al servidor remoto, asegúrese de que el puerto esté abierto

Tal vez no iniciaste tu servidor Mysql y Apache. Después de que comencé el servidor Apache y Mysql desde el Panel de control de XAMPP, la conexión se estableció con éxito.

¡Buena suerte!

Enfrenté el mismo problema en IntelliJ IDEA.

Para resolver el problema de conexión, tuve que desconectar ( + F2 usando combinaciones de teclas predeterminadas en un Mac) y reconectar de nuevo. Solo presionar “actualizar” no fue suficiente.