ClassCastException: java.math.BigInteger не может быть приведен к java.lang.Long при подключении к MySQL

При подключении к MySQL выдается ошибка (см. Ниже).

Нажмите здесь для кода

Я получаю этот вывод:

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)

Как я могу решить это?

Ответ 1

В вашей ошибке ясно, что приведение невозможно, потому что экземпляр класса java.math.BigInteger не является экземпляром класса java.lang.Long.

Теперь возникает вопрос, кто выполняет приведение на каком уровне, когда мы просим драйвер JDBC установить соединение, он проделывает большую работу за кулисами, прежде чем он фактически вернет нам надлежащий рабочий объект соединения.

Проблема кажется с вашей версией MySQL в сочетании с вашей версией mysql-connector.jar. Попробуйте более новую версию MySQL Connector/J (см. Https://dev.mysql.com/downloads/connector/j/ для последней версии), например, обновите до 5.1.47 или 8.0.12, если вы используете более старую версию версия.

Ответ 3

Для меня обновления соединителя было недостаточно, мне также пришлось дополнить свой параметр DriverManager.getConnection() url всеми аргументами, даже если в сообщении об ошибке не упоминалась эта проблема.

В моем случае эти параметры были необходимы: "jdbc:mysql://127.0.0.1:3306/database?zeroDateTimeBehavior=convertToNull&serverTimezone=UTC"

Разъем: mysql-connector-java-8.0.17.jar Версия MySQL: 8.0.17

Использование Java на NetBeans.