java mysql

No se puede conectar a MySQL desde Java: NullPointerException dentro de la lógica de conexión del controlador MySQL



(3)

Estoy tratando de conectarme a una base de datos que creé con MySQL en mi programa Java, pero siempre falla.

Por el bien de ejemplo, aquí está mi código:

import java.sql.*; public class Squirrel { public static void main(String[] args) { String user; String password; Connection connection; Statement statement; try { Class.forName("com.mysql.jdbc.Driver"); connection = DriverManager.getConnection( "jdbc:mysql://localhost:3306", user, password); statement = connection.createStatement(); // Other code } catch (ClassNotFoundException | SQLException e) { e.printStackTrace(); } finally { try { if (statement != null) { statement.close(); } if (connection != null) { connection.close(); } } catch (SQLException e) { e.printStackTrace(); } } } }

Puedo conectarme a la base de datos desde IntelliJ y he agregado mysql-connector-java-5.1.40.jar agregado al proyecto, pero cada vez que ejecuto el programa DriverManager.getConnection() arroja esto:

com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server. at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:488) at com.mysql.jdbc.Util.handleNewInstance(Util.java:425) at com.mysql.jdbc.Util.getInstance(Util.java:408) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:918) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:897) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:886) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:860) at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2330) at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2083) at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:806) at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47) at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:488) at com.mysql.jdbc.Util.handleNewInstance(Util.java:425) at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:410) at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:328) at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:678) at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:229) at Squirrel.main(Squirrel.java:12) Caused by: java.lang.NullPointerException at com.mysql.jdbc.ConnectionImpl.getServerCharset(ConnectionImpl.java:2997) at com.mysql.jdbc.MysqlIO.sendConnectionAttributes(MysqlIO.java:1934) at com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication(MysqlIO.java:1863) at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1226) at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2253) at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2284) ... 13 more


Puede ser porque está utilizando una versión anterior del controlador MySQL. Deberías intentar usar la versión más nueva.

Para obtener la versión más reciente, puede consultar https://mvnrepository.com/artifact/mysql/mysql-connector-java

A partir de ahora, la versión más nueva es 8.0.11. Puede descargarlo here o agregarlo a su pom.xml :

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

Actualizar

Tras una investigación más profunda, parece que se debe a un cambio que se introdujo en MySQL 8.0.1 :

El problema que informó está relacionado con los cambios introducidos en MySQL 8.0.1 wrt el soporte de conjuntos de caracteres y colaciones, con la adición de ahora ser ''utf8mb4'' el conjunto de caracteres predeterminado. Tales cambios rompieron la forma en que Connector / J inicializa las conexiones.

Como sabe, esto se solucionó en Connector / J 5.1.41 y estoy seguro de que ya actualizó su biblioteca.

reference

Como se mencionó anteriormente, una solución alternativa a su problema habría sido usar 5.1.41 lugar de 5.1.40 .


Si llama a la dirección IP 127.0.0.1/localhost, entonces se está comunicando con el localhost, en principio, con su propia computadora. Este problema también aparece cuando no tiene localhost configurado

Para sistemas Linux

  • Agregue / edite "127.0.0.1 localhost" en / etc / hosts si falta.

Para el sistema de Windows

  • Agregue / edite en C: windows / system32 / drivers / etc / hosts si falta.

Para más detalles sobre localhost


Suena como un posible desajuste de versión o un cliente desactualizado. Cuando lo ejecutas fuera del IDE, es posible que estés sacando la versión incorrecta. Me aseguraría de que el cliente tenga la última versión o similar a la versión utilizada por el servidor.