Solución:
Entonces, tienes un
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: falla en el enlace de comunicaciones
java.net.ConnectException: conexión rechazada
Estoy citando esta respuesta que también contiene un tutorial paso a paso de MySQL + JDBC:
Si obtienes un
SQLException: Connection refused
oConnection timed out
o un MySQL específicoCommunicationsException:
, entonces significa que la base de datos no es accesible en absoluto. Esto puede tener una o más de las siguientes causas:
Communications link failure
La dirección IP o el nombre de host en la URL de JDBC son incorrectos.
- El servidor DNS local no reconoce el nombre de host en la URL de JDBC.
- Falta el número de puerto o es incorrecto en la URL de JDBC.
- El servidor de base de datos está inactivo.
- El servidor de base de datos no acepta conexiones TCP / IP.
- El servidor de base de datos se ha quedado sin conexiones.
- Algo entre Java y DB está bloqueando las conexiones, por ejemplo, un firewall o proxy.
Para solucionar uno u otro, siga los siguientes consejos:
- Verifíquelos y pruébelos con
ping
.- Actualice el DNS o utilice la dirección IP en la URL de JDBC en su lugar.
- Verifíquelo en base a
my.cnf
de MySQL DB.- Inicie la base de datos.
- Verifique si mysqld se inicia sin el
--skip-networking option
.- Reinicie la base de datos y corrija su código en consecuencia que cierra las conexiones en
finally
.- 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 utilizar una instancia estática de java.sql.Connection en un sistema multiproceso?
Capturo esta excepción cuando Java se agota. Si trato de poner muchos elementos de datos en la RAM, primero los capturo “Fallo en el enlace de comunicaciones” y después “Error de memoria insuficiente“.
Lo logré y disminuyo el consumo de memoria (elimino 1/2 dato) y todo está bien.
En mi caso, necesitaba hacer un reemplazo de Localhost a la dirección IP del servidor de base de datos real
En lugar 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");