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?");
}
}
Respuestas:
Entonces, tienes un
Cito esta respuesta que también contiene un tutorial paso a paso de MySQL + JDBC:
Ver también:
fuente
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.
fuente
En mi caso, necesitaba hacer un reemplazo de Localhost a la dirección IP del servidor de base de datos real
En vez de
lo necesitaba
fuente
Esta
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
excepció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.fuente
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.
fuente
Podría estar ladrando el árbol equivocado aquí, pero su excepción parece indicar que su servidor MySQL no está disponible.
¿Qué sucede si lo intentas (desde la terminal)?
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.
fuente
localhost
uso del nombre de usuario / contraseña correcto y funciona bien.En mi caso, resultó que la versión de
mysql-connector-java
era demasiado antigua.En mi demo, de alguna manera uso
mysql-connector-java
así:Pero en el entorno de desarrollo, uso esto:
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!
fuente
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.
fuente
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.
fuente
Actualice su dirección IP en el archivo /etc/mysql/my.cnf
Reinicie los servicios mysql deamon y mysql.
fuente
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.
fuente
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 / J8.0.13
, esa configuración está en desuso. Aquí hay un extracto de las Propiedades de configuración de MySQL Connector / J 8.0 :Entonces, en mi caso, la configuración
sslMode=DISABLED
era 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 :fuente
Mi mismo problema se resuelve con los siguientes pasos:
Ir
my.cnf
Modificar su dirección de enlace
Reiniciar MySQL
fuente
Si está utilizando
WAMP
oXAMP
servidor 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 failure
al conectarse con la base de datosfuente
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í .
fuente
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.
fuente
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
fuente
Acabo de experimentar esto.
Tengo que hacerlo funcionar: (esto se puede colocar en el bloque de entrada estático)
También al obtener la conexión a través de:
en lugar de especificar los parámetros de inicio de sesión
Saludos.
fuente
Intenta cambiar
localhost
a127.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
:Y no hay respuesta del servidor MySQL.
Por supuesto, asegúrese de que su servidor MySQL se esté ejecutando.
fuente
si mysql versión 8 o superior actualizó el conector del usuario
fuente
Para llamadas remotas a Mysql
Agregue usuario remoto a Mysql desde por ejemplo IP = remoteIP:
Permitir acceso remoto a Mysql (por defecto no se permiten todas las llamadas externas):
Para la última versión del controlador JDBC, el JDBC:
fuente
Tuve el mismo problema, y así es como se solucionó:
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
Statement
yResultSet
para cada consulta de tabla.fuente
Podría ser un simple problema de jarra. Es posible que esté utilizando una
mysql-connector-java-XXX-bin.jar
versión anterior que no sea compatible con su versión actual de MySQL. Lo usémysql-connector-java-5.1.18-bin.jar
como lo estoy usandomysql 5.5
y este problema se resolvió por mí.fuente
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!
fuente
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:
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.
fuente
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:
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 .
Todo comenzó cuando vi la respuesta de Ankit Jain
fuente
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.
fuente
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 ...
fuente
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:
Ninguna de las sugerencias anteriores funcionó. ¡Por alguna razón intenté resolver el problema simplemente reiniciando PhpStorm y listo, funcionó!
fuente
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).
fuente