ClassCastException: java.mathématique.BigInteger ne peut pas être converti en java.lang.Long sur se connecter à MySQL


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

Cliquez sur 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 ce problème?

Author: Mark Rotteveel, 2017-09-09

4 answers

Votre erreur indique clairement que le casting n'est pas possible, car un java.mathématique.L'instance de classe BigInteger n'est pas une instance de java.lang.Long de la classe.

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-scène avant de nous rendre le bon objet de travail de connexion.

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

 40
Author: Rizwan, 2018-10-01 18:51:48

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/

 4
Author: Tom Taylor, 2019-04-13 21:16:07

Il y a un manque de correspondance entre votre version MySQL, qui pourrait être la dernière 8.0.19, mais le fichier de pilote MySQL est une version plus ancienne peut être 5.1.23, qui est généralement disponible avec l'EDI NetBeans. Pour surmonter cela, téléchargez mysql-connector-java-5.1.48.jar de ce lien dans votre PC télécharger connecteur / j 5.1.48 fichier zip (4,6 Mo)

Maintenant, faites un clic droit sur le nom du projet dans l'EDI netbeans, allez dans services, choisissez 'Bibliothèques', choisissez 'Ajouter une bibliothèque', puis n'optez pas pour les bibliothèques disponibles( le menu déroulant listera un fichier JDBCDriver qui a ' mysql-connector-java-5.1.23.fichier jar ' à l'intérieur, qui est une ancienne version, cela provoque le miss-match). Par conséquent, cliquez plutôt sur 'Créer une bibliothèque', donnez-lui maintenant le nom de votre choix, puis cliquez sur le bouton Créer, une fenêtre de navigation apparaîtra, allez dans le répertoire où vous avez téléchargé le 'mysql-connector-java-5.1.48.zip dossier, ouvrez-le et sélectionnez la java jar fichier " mysql-connector-java-5.1.48.pot' et cliquez sur 'ok'. Le dossier bibliothèque de votre arborescence de projet affichera maintenant ' JDBCDriver-mysql-connector-java-5.1.48.jar ' ajouté dans la liste des bibliothèques(JDK et Tomcat) . Essayez maintenant de vous connecter à nouveau à votre base de données en cliquant sur le bouton "exécuter", accédez au lien JSP et vous voyez que cette fois vous êtes connecté.

 2
Author: Ashutosh K Singh, 2020-03-20 19:29:30

Pour moi, la mise à jour du connecteur n'était pas suffisante, j'ai également dû compléter mon paramètre DriverManager.getConnection() url 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 netbeans.

 1
Author: Francois, 2019-09-20 15:07:02