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

226

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

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

Me sale 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.<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

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?");
    }
}
Josh K
fuente
17
Yo era un estupido. El servidor MySQL no se inició :( Fue exitoso después de iniciarlo.
akfaisel

Respuestas:

252

Entonces, tienes un

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

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

Si obtiene un SQLException: Connection refusedo Connection timed outun MySQL específico CommunicationsException: Communications link failure, significa que no se puede acceder al DB en absoluto. 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 son incorrectos.
  2. El servidor DNS local no reconoce el nombre de host en la URL JDBC.
  3. Falta el número de puerto o es incorrecto en la URL JDBC.
  4. El servidor de base de datos está inactivo.
  5. El servidor de base de datos 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 DNS o utilice la dirección IP en la URL JDBC en su lugar.
  3. Verifíquelo en base a my.cnfMySQL DB.
  4. Inicia la base de datos.
  5. Verifique si mysqld se inicia sin el --skip-networking option.
  6. Reinicie la base de datos y corrija su código en consecuencia para que cierre las conexiones finally.
  7. Deshabilite el firewall y / o configure el firewall / proxy para permitir / reenviar el puerto.

Ver también:

BalusC
fuente
44
MAMP / MAMP Pro establece MAMP_skip-networking_MAMP de forma predeterminada. Debe deshabilitar esta línea en su my.cfn
Jurik
66
No en este caso, pero también ocurre una falla en el enlace de comunicaciones cuando está utilizando un conjunto de conexiones y las conexiones están cerradas debido a una inactividad prolongada. Solo en ese caso, dice "El último paquete se recibió hace unos" X "segundos"
nikel
@nikel ¿No deberían mantenerse activos los hilos en el grupo de conexiones activando la consulta de validación "select 1"? ¿Por qué se cerrarían por inactividad prolongada cuando hemos configurado el desalojador para que se ejecute a intervalos de tiempo más cortos que el tiempo de espera del servidor mysql?
Farhad
Sí, una consulta de validación solucionaría esto. Mi punto era sobre el caso cuando no está configurado y las conexiones en el grupo se agotaron debido a la inactividad
nikel
A veces falta el puerto de la cadena de conexión y el controlador intentará conectarse al puerto mysql 3306 predeterminado y fallará si mysql no se está ejecutando en este puerto. Era mi problema, así que debería mencionarlo en caso de que alguien más lo encuentre útil.
Abdul Mannan
10

Capturo esta excepción cuando Java está fuera del montón. Si trato de poner muchos elementos de datos en la RAM, primero cojo " Error de enlace de comunicaciones " y luego " OutOfMemoryError ".

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

usuario1694306
fuente
9

En mi caso, necesitaba hacer un reemplazo de Localhost a la dirección IP del servidor de base de datos real

En vez de

 Connection con = DriverManager.getConnection(
 "jdbc:mysql://localhost:3306/DBname", "root", "root");

lo necesitaba

 Connection con = DriverManager.getConnection(
 "jdbc:mysql://192.100.0.000:3306/DBname", "root", "root");
sureshAngamuthu
fuente
En la última actualización 4/5/18: Actualmente, estoy usando MySQL Workbench 6.3. Vine aquí para verificar la solución, pero la encontré por mi cuenta, es solo que su servidor MySQL no se está ejecutando o se detuvo. Reinicié mi servidor, funcionó a las mil maravillas.
Abhishek Ekaanth
77
Esta es la 'mejor solución' ¿por qué? ¿Qué problema resuelve y cómo?
Marqués de Lorne
esta solución no puede generar marcos de datos
Alan
8

Esta com.mysql.jdbc.exceptions.jdbc4.CommunicationsExceptionexcepción ocurre si la conexión de su base de datos está inactiva durante mucho tiempo.

Esta conexión inactiva devuelve verdadero, connection.isClosed();pero si intentamos ejecutar la instrucción, activará esta excepción, por lo que sugeriré ir con la agrupación de bases de datos.

Yogesh Funde
fuente
2
También ocurre por otras razones como 'conexión rechazada'.
Marqués de Lorne
6

He tenido el mismo problema durante horas. Estoy usando el servidor MAMP

En lugar de usar localhost: [Puerto Apache], 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);
Abdul Rahim Mohamad
fuente
si tienes mamp antes de instalar Mysql, prueba este método
DAVIS BENNY 15MIS0426
5

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 subproceso "main" com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: error de enlace de comunicaciones El último paquete enviado con éxito al servidor fue hace 0 milisegundos. El controlador no ha recibido ningún paquete del servidor. a...

¿Qué sucede si lo intentas (desde la terminal)?

mysql -u username -p

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

Puede que tenga que iniciar MySQL desde las preferencias si no. También puede configurarlo para que se ejecute al inicio.

Karl Walsh
fuente
1
Estoy usando MAMP para ejecutar mi servidor MySQL. ¿Sería eso un problema?
Josh K
Cuando me conecto (a través de Sequal Pro) a mi localhostuso del nombre de usuario / contraseña correcto y funciona bien.
Josh K
5

En mi caso, resultó que la versión de mysql-connector-javaera demasiado antigua.

En mi demo, de alguna manera uso mysql-connector-javaasí:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.9</version>
</dependency>

Pero en el entorno de desarrollo, uso esto:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.31</version>
</dependency>

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

Como se encuentra la razón, también se encuentra la solución. ¡Combina la versión!

adiós
fuente
44
Improbable. Se supone que todas estas versiones de controladores son compatibles con versiones anteriores.
Marqués de Lorne
1
Este problema parece solucionarse en los nuevos conectores mysql, consulte stackoverflow.com/questions/14559794/…
Nishi
El mismo caso para mí. La versión del controlador es para MySQL 5 mientras que la versión del servidor es 8. Así que actualicé la versión del jar y el problema se resolvió.
edenPan
4

Obtuve el mismo error porque estaba tratando de ejecutar mi programa sin iniciar el servidor mysql.

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

rs2012
fuente
4

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 el motivo era una restricción de red de mi empresa.

La misma conexión estaba teniendo éxito cuando estaba en cualquier otra red.

usuario3251882
fuente
1
Este puntero resolvió mi problema, especificando que 'localhost' funcionaba cuando me conecto a VPN, pero no funcionaba si me desconectaba de VPN, sin embargo, arreglé esto cambiando 'localhost' a '127.0.0.1'
gannu_lee
4

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

bind-address  = 0.0.0.0

Reinicie los servicios mysql deamon y mysql.

Sreedhar GS
fuente
1
Editado para usar una dirección de enlace válida
OneCricketeer
3

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

Debe incluir el jar del controlador durante la compilació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" );
apilador
fuente
No, me da una tormenta de errores sobre no encontrar nada. ¿Sería posible importar esto sin el archivo JAR?
Josh K
@Josh esto funciona, realmente solo necesitas configurar tu classpath correctamente. (O copie el archivo jar en su directorio% JAVA_HOME% \ jre \ lib \ ext, pero esto se considera una mala práctica)
apilador
3

Este error también puede ocurrir si Java intenta conectarse a MySQL a través de SSL, pero algo sale mal. (En mi caso, estaba configurando los grupos de conexión de Payara Server 5.193.1 a MySQL).

Algunas personas sugirieron la configuración useSSL=false. Sin embargo, desde la versión Connector / J 8.0.13, esa configuración está en desuso. Aquí hay un extracto de las Propiedades de configuración de MySQL Connector / J 8.0 :

sslMode

Por defecto, las conexiones de red están encriptadas SSL; Esta propiedad permite que se desconecten las conexiones seguras o que se elijan diferentes niveles de seguridad. Se permiten los siguientes valores: DISABLED- Establecer conexiones sin cifrar; PREFERRED- (predeterminado) Establezca conexiones cifradas si el servidor las habilitó; de lo contrario, recurra a conexiones no cifradas; REQUIRED- Establezca conexiones seguras si el servidor las habilitó; de lo contrario, falle; VERIFY_CA- Me gusta REQUIREDpero además verifica el certificado TLS del servidor contra los certificados de Autoridad de certificación (CA) configurados; VERIFY_IDENTITY- Me gusta VERIFY_CA, pero además verifique que el certificado del servidor coincida con el host al que se intenta la conexión.

Esta propiedad reemplazado las propiedades obsoletas heredadas useSSL, requireSSLy verifyServerCertificate, que aún son aceptadas, pero se tradujo en un valor para sslModesi sslModeno se establece de manera explícita: useSSL=falsese traduce a sslMode=DISABLED; {"useSSL=true", "requireSSL=false", "verifyServerCertificate=false"}se traduce a sslMode=PREFERRED; {"useSSL=true", "requireSSL=true", "verifyServerCertificate=false"}se traduce a sslMode=REQUIRED; {"useSSL=true" AND "verifyServerCertificate=true"}se traduce a sslMode=VERIFY_CA. No hay configuraciones heredadas equivalentes para sslMode=VERIFY_IDENTITY. Tenga en cuenta que, para las versiones de servidor de todo, la configuración por defecto de sslModeque es PREFERRED, y es equivalente a la configuración de legado de useSSL=true, requireSSL=falseyverifyServerCertificate=false, que son diferentes de sus configuraciones predeterminadas para Connector / J 8.0.12 y anteriores en algunas situaciones. Deben revisarse las aplicaciones que continúan usando las propiedades heredadas y dependen de su configuración predeterminada anterior.

Las propiedades heredadas se ignoran si sslModese establece explícitamente. Si ninguno de sslModeo useSSLse establece explícitamente, se sslMode=PREFERREDaplica la configuración predeterminada de .

Predeterminado :PREFERRED

Desde la versión : 8.0.13

Entonces, en mi caso, la configuración sslMode=DISABLEDera todo lo que necesitaba para resolver el problema. Esto fue en una máquina de prueba. Pero para la producción, la solución segura sería configurar correctamente el cliente Java y el servidor MySQL para usar SSL.


Tenga en cuenta que al deshabilitar SSL, es posible que también deba configurarlo allowPublicKeyRetrieval=true. (Nuevamente, no es una decisión acertada desde el punto de vista de la seguridad). Se proporciona más información en las Opciones de MySQL ConnectionString :

AllowPublicKeyRetrieval

Si la cuenta de usuario usa sha256_passwordautenticación, la contraseña debe protegerse durante la transmisión; TLS es el mecanismo preferido para esto, pero si no está disponible, se utilizará el cifrado de clave pública RSA. Para especificar la clave pública RSA del servidor, use la ServerRSAPublicKeyFileconfiguración de cadena de conexión, o configure AllowPublicKeyRetrieval=Truepara permitir que el cliente solicite automáticamente la clave pública del servidor. Tenga en cuenta que AllowPublicKeyRetrieval=Truepodría permitir que un proxy malicioso realice un ataque MITM para obtener la contraseña de texto sin formato, por lo que es False de forma predeterminada y debe habilitarse explícitamente.

MS Dousti
fuente
Hilo relevante de Payara Server GitHub .
MS Dousti
3

Mi mismo problema se resuelve con los siguientes pasos:

  1. Ir my.cnf

    vi /etc/mysql/my.cnf
  2. Modificar su dirección de enlace

    "bind-address = 0.0.0.0"
  3. Reiniciar MySQL

    sudo /etc/init.d/mysql restart
Haimei
fuente
2

Si está utilizando WAMPo XAMPservidor para instalar la base de datos mysql. Luego, debe iniciar explícitamente mysql sever; de lo contrario, se mostrará com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failureal conectarse con la base de datos

xrcwrn
fuente
2

Resolví este problema de una manera fácil, eso funcionó para mí. Tuve el problema seme "com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: error de enlace de comunicaciones". En mi archivo db.properties tenía esto: url: jdbc: mysql: // localhost: 90 / myDB, solo eliminé la url del puerto, lo que resultó de esta manera url: jdbc: mysql: // localhost / myDB y eso funcionó para mí .

Darío Castro
fuente
2

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

MrPencil
fuente
2

Si cambió su puerto, aparece este tipo de error "com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: error en el enlace de comunicaciones" Compruebe su número de puerto

Maheshkumar.V
fuente
1

Acabo de experimentar esto.

Tengo que hacerlo funcionar: (esto se puede colocar en el bloque de entrada 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,<username>,<password>);

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.

mel3kings
fuente
2
El bloqueo estático no ha sido necesario desde 2007, y puede especificar los parámetros de inicio de sesión de cualquier manera.
Marqués de Lorne
1

Intenta cambiar localhosta 127.0.0.1.

El localhost 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.

Haozhe Xie
fuente
Eso es realmente un problema con su archivo / etc / hosts, no Mysql
OneCricketeer
@ cricket_007 Por defecto, localhost se resuelve en :: 1 en lugar de 127.0.0.1.
Haozhe Xie
1
Claro, solo si ipv6 está habilitado y dependiendo del archivo de hosts
OneCricketeer
1
dbhost=jdbc:mysql://172.18.23.100:3306/yourdatabase?useUnicode=yes&characterEncoding=UTF-8&useSSL=false
user=root
password=Password#321

con = DriverManager.getConnection(dbhost, user, password);

si mysql versión 8 o superior actualizó el conector del usuario

Ravinath
fuente
esta es la respuesta correcta, solo agregue useSSL = false a la cadena de conexión cuando use el controlador MySQL 8 o superior.
Mohannd
1

Para llamadas remotas a Mysql

  1. Agregue usuario remoto a Mysql desde por ejemplo IP = remoteIP:

    mysql -u xxxx -p //local coonection to mysql
    mysql> GRANT ALL PRIVILEGES ON *.* TO 'theNewUser'@'remoteIP' IDENTIFIED BY 'passWord';
    //Query OK, 0 rows affected (xx sec)
    mysql> FLUSH PRIVILEGES;
    //Query OK, 0 rows affected
  2. Permitir acceso remoto a Mysql (por defecto no se permiten todas las llamadas externas):

    Edit 
    /etc/mysql/mysql.conf.d/mysqld.cnf    or    /etc/mysql/my.cnf
    Change line:  bind-address = 127.0.0.1   to
                  bind-address = 0.0.0.0
    Restart Mysql: /etc/init.d/mysql restart
  3. Para la última versión del controlador JDBC, el JDBC:

    jdbc.url='jdbc:mysql://remoteIP:3306/yourDbInstance?autoReconnect=true&amp;useUnicode=true&amp;useJDBCCompliantTimezoneShift=true&amp;useLegacyDatetimeCode=false&amp;serverTimezone=UTC'
    jdbc.user='theNewUser'
Yugerten
fuente
0

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

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

No estoy exactamente seguro de cuál solucionó el problema, pero funcionó. Además, asegúrese de que se crea un nuevo Statementy ResultSetpara cada consulta de tabla.

usuario3427633
fuente
1
(1) ciertamente no causa este problema.
Marqués de Lorne
0

Podría ser un simple problema de jarra. Es posible que esté utilizando una mysql-connector-java-XXX-bin.jarversión anterior que no sea compatible con su versión actual de MySQL. Lo usé mysql-connector-java-5.1.18-bin.jarcomo lo estoy usando mysql 5.5y este problema se resolvió por mí.

Ankit Jain
fuente
1
Sí, puede haber una posibilidad de desajuste de jar.
Kiran Nunna
Se supone que todas estas versiones de controladores son compatibles.
Marqués de Lorne
0

Tal vez no inició su servidor Mysql y Apache. Después de iniciar el servidor Apache y Mysql desde el panel de control XAMPP, la conexión se estableció con éxito.

¡Buena suerte!

shivam gupta
fuente
0

Lo que resolvió para mí es hacer 2 cosas: 1. crear un nuevo usuario que no sea root con alguna contraseña utilizando las siguientes opciones:

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.

Abdul Khalid
fuente
Tendrá que repetir eso para todos los usuarios remotos o agregar un comodín en lugar de Localhost
OneCricketeer
0

Intentaba conectarse a una versión anterior de MySQL ('versión', '5.1.73'); cuando usa 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 tiene que especificar cuál usa:

Cargando clase com.mysql.jdbc.Driver'. This is deprecated. The new driver class iscom.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 declaración para usar la versión 5.1.38 del mysql-connector-java y, en el código, guardé el com.mysql.jdbc.Driver .

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.38</version>
</dependency>

Todo comenzó cuando vi la respuesta de Ankit Jain

estellezg
fuente
0

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

Michal Šípek
fuente
0

En mi MacBook, he resuelto este error solo cuando reinstalo la nueva versión de eclipse EE y elimino servidores locales como xamp mysql o mamp, pero utilizo solo uno de ellos ...

m Piroli
fuente
0

En mi caso, tuve que establecer un túnel ssh para la base de datos remota y todas las configuraciones eran correctas y probar la conexión con PhpStorm también fue exitoso. Y también se cargó el esquema, pero no los datos. En cambio obtuve:

[08S01] 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.

Ninguna de las sugerencias anteriores funcionó. ¡Por alguna razón intenté resolver el problema simplemente reiniciando PhpStorm y listo, funcionó!

Nómada de la tecnología
fuente
0

Estaba recibiendo múltiples errores como:

  • 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.

Tuve que agregar:

  • En AndroidManifest.xml incluye <uses-permission android:name="android.permission.INTERNET"/>justo después de la etiqueta de manifiesto de apertura.

  • Agregue el controlador JDBC a sus dependencias de Gradle (o Maven).

Daniel Segura
fuente