ClassCastException:java.math.BigInteger 在连接到 MySQL 时无法转换为 java.lang.Long

Posted

技术标签:

【中文标题】ClassCastException:java.math.BigInteger 在连接到 MySQL 时无法转换为 java.lang.Long【英文标题】:ClassCastException: java.math.BigInteger cannot be cast to java.lang.Long on connect to MySQL 【发布时间】:2018-02-18 06:06:52 【问题描述】:

连接到 mysql 时出现错误(见下文)。

点击here获取代码

我得到这个输出:

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。

【讨论】:

Bug#13958793 已在 mysql 连接器上记录并解决。 将连接器的 jar 版本从 5.1.21 更改为 5.1.45 - 成功! 它为我节省了很多时间 这个答案解决了我的问题。谢谢!我还想补充一点,以便轻松了解这个 Maven 命令帮助很大的每个依赖项的版本。 mvn 依赖:tree > tree.txt【参考方案2】:

上述 cmets 中提到的 5.1.45 不存在此问题。可在以下位置下载,

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

【讨论】:

5.1.47 上测试没有错误,但是出现了关于 SSL 的警告,我必须在 url 连接中包含 useSSL=false 才能摆脱它。【参考方案3】:

您的 MySQL 版本不匹配,可能是最新的 8.0.19,但 MySQL 驱动程序文件较旧的版本可能是 5.1.23,NetBeans IDE 通常可用。要克服这个问题,请从您的 PC download connector/j 5.1.48 zip file 中的此链接下载 mysql-connector-java-5.1.48.jar (4.6MB)

现在右键单击 netbeans IDE 中的项目名称,转到服务,在其中选择“库”,在其中选择“添加库”,然后不要选择可用库(下拉菜单将列出一个 JDBCDriver 文件,其中包含“mysql-connector-java-5.1.23.jar”文件,这是旧版本,这会导致不匹配)。因此,改为单击“创建库”,现在给它您选择的任何名称,然后单击创建按钮,将弹出一个浏览窗口,转到您下载“mysql-connector-java-5.1”的目录.48.zip'文件夹,打开它并选择java jar文件'mysql-connector-java-5.1.48.jar'并点击'ok'。项目树的库文件夹现在将显示添加到库列表(JDK 和 Tomcat)中的 'JDBCDriver-mysql-connector-java-5.1.48.jar'。现在尝试通过单击“运行”按钮再次连接到您的数据库,转到 JSP 链接,您会看到这次您已连接。

【讨论】:

【参考方案4】:

对我来说,更新连接器还不够,我还必须用所有参数完成我的 DriverManager.getConnection() url 参数,即使错误消息没有提到这个问题。

在我的情况下,需要这个参数: "jdbc:mysql://127.0.0.1:3306/database?zeroDateTimeBehavior=convertToNull&amp;serverTimezone=UTC"

连接器:mysql-connector-java-8.0.17.jar mysql版本:8.0.17

在 netbeans 上使用 java。

【讨论】:

【参考方案5】:

另一种方式,因为从mysql更改版本对我不起作用,请帮助其他人:

Long.parseLong(String.valueOf(item[0]);

【讨论】:

【参考方案6】:

当您使用过时/不受支持的 mysql 连接器驱动程序时,这是一个常见问题。如果您使用的是 x86 版本的 Netbeans,您的驱动程序通常会在 Program(x86) 文件夹中找到,而不是在 Program 文件夹中。像这样“C:\Program Files (x86)\MySQL\Connector J 8.0\mysql-connector-java-8.0.23.jar”

【讨论】:

以上是关于ClassCastException:java.math.BigInteger 在连接到 MySQL 时无法转换为 java.lang.Long的主要内容,如果未能解决你的问题,请参考以下文章

PySpark:java.lang.ClassCastException

应用 PathProperties 后的 ClassCastException

MIUI 11/12 主题切换导致 LifeCycleException、ClassCastException

ClassCastException 发生在 onRestoreInstanceState

Java HashMap导致ClassCastException

用 Java Lambda 编写的 Spark UDF 引发 ClassCastException