web-dev-qa-db-fra.com

ClassCastException: Java.math.BigInteger ne peut pas être converti en Java.lang.Long lors de la connexion à MySQL

Lors de la connexion à MySQL, j'obtiens une erreur (voir ci-dessous).

Cliquez ici pour le code

J'obtiens cette sortie:

run:
Now connecting to databse...

Java.sql.SQLException: Java.lang.ClassCastException: Java.math.BigInteger cannot be cast to Java.lang.Long
Java.sql.SQLException: Java.lang.ClassCastException: Java.math.BigInteger cannot be cast to Java.lang.Long
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.Java:1074)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.Java:988)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.Java:974)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.Java:919)
    at com.mysql.jdbc.ConnectionImpl.buildCollationMapping(ConnectionImpl.Java:1062)
    at com.mysql.jdbc.ConnectionImpl.initializePropsFromServer(ConnectionImpl.Java:3556)
    at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.Java:2513)
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.Java:2283)
    at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.Java:822)
    at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.Java:47)
    at Sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at Sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.Java:62)
    at Sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.Java:45)
    at Java.lang.reflect.Constructor.newInstance(Constructor.Java:423)
    at com.mysql.jdbc.Util.handleNewInstance(Util.Java:411)
    at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.Java:404)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.Java:317)
    at Java.sql.DriverManager.getConnection(DriverManager.Java:664)
    at Java.sql.DriverManager.getConnection(DriverManager.Java:247)
    at dbms_basic.Dbms_Basic.main(Dbms_Basic.Java:28)
Caused by: Java.lang.ClassCastException: Java.math.BigInteger cannot be cast to Java.lang.Long
    at com.mysql.jdbc.ConnectionImpl.buildCollationMapping(ConnectionImpl.Java:1007)
    ... 15 more
BUILD SUCCESSFUL (total time: 0 seconds)

Comment puis-je résoudre ça?

12

Votre erreur indique clairement que la conversion n'est pas possible, car une instance de classe Java.math.BigInteger n'est pas une instance de la classe Java.lang.Long.

Maintenant, la question se pose de savoir qui fait le casting à quel niveau, lorsque nous demandons au pilote JDBC d'établir une connexion, il fait beaucoup de travail en arrière-plan avant de nous rendre réellement l'objet de connexion approprié.

Le problème semble avec votre version de MySQL en combinaison avec votre version de mysql-connector.jar. Essayez une version plus récente de MySQL Connector/J (voir https://dev.mysql.com/downloads/connector/j/ pour la dernière version), par exemple la mise à niveau vers 5.1.47 ou 8.0. 12 si vous utilisez une ancienne version.

22
Rizwan

Ce problème n'est pas là avec 5.1.45 comme mentionné dans les commentaires ci-dessus. Disponible en téléchargement sur,

https://repo1.maven.org/maven2/mysql/mysql-connector-Java/5.1.45/

1
rm -rf star

Pour moi, la mise à jour du connecteur ne suffisait pas, j'ai également dû compléter mon paramètre url DriverManager.getConnection() avec tous les arguments, même si le message d'erreur ne mentionnait pas ce problème.

Dans mon cas, ces paramètres étaient nécessaires: "jdbc:mysql://127.0.0.1:3306/database?zeroDateTimeBehavior=convertToNull&serverTimezone=UTC"

Connecteur: mysql-connector-Java-8.0.17.jar version mysql: 8.0.17

Utilisation de Java sur les netbeans.

0
Francois