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?
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.
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/
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.