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

9 浏览
0 Comments

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

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

点击这里查看代码。

我得到以下输出:

run:
正在连接到数据库...
java.sql.SQLException: java.lang.ClassCastException: java.math.BigInteger无法转换为java.lang.Long
java.sql.SQLException: java.lang.ClassCastException: java.math.BigInteger无法转换为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.(ConnectionImpl.java:822)
    at com.mysql.jdbc.JDBC4Connection.(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无法转换为java.lang.Long
    at com.mysql.jdbc.ConnectionImpl.buildCollationMapping(ConnectionImpl.java:1007)
    ... 15 more
BUILD SUCCESSFUL(总时间:0秒)

我该如何解决这个问题?

0
0 Comments

这个问题的出现原因是在连接到MySQL时发生了ClassCastException。具体来说,java.math.BigInteger无法被强制转换为java.lang.Long。这个问题可以通过以下解决方法解决:

1. 检查使用的MySQL连接器版本。根据上述评论,这个问题在5.1.45版本中不存在。因此,可以尝试下载并使用该版本的连接器,可以在以下链接下载:https://repo1.maven.org/maven2/mysql/mysql-connector-java/5.1.45/

2. 如果使用的是5.1.47版本的连接器,并且出现了SSL警告,可以在连接URL中添加useSSL=false来解决该问题。具体来说,在连接MySQL时,将URL中的jdbc:mysql://后面添加?useSSL=false

通过上述解决方法,可以解决在连接到MySQL时出现的ClassCastException: java.math.BigInteger cannot be cast to java.lang.Long的问题。

0
0 Comments

在连接MySQL时出现了ClassCastException: java.math.BigInteger cannot be cast to java.lang.Long的问题。这个问题的原因是尝试将java.math.BigInteger类型的对象强制转换为java.lang.Long类型,但类型不匹配导致转换失败。

解决这个问题的方法是使用Long.parseLong方法将BigInteger对象转换为Long类型。可以使用以下代码来解决这个问题:

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

这段代码将BigInteger对象转换为String类型,然后再使用Long.parseLong方法将其转换为Long类型。这样就避免了将BigInteger强制转换为Long类型时出现类型不匹配的问题。

这个问题的出现可能是因为在连接MySQL时,返回的结果中包含了BigInteger类型的数据。而在使用这些数据时,尝试将其转换为Long类型导致了类型不匹配的异常。通过使用Long.parseLong方法将BigInteger对象转换为Long类型,就可以解决这个问题。

0
0 Comments

问题的原因是因为在连接MySQL时发生了类型转换错误,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),并已解决。

将连接器的jar版本从5.1.21更改为5.1.45-解决了问题!这节省了我很多时间。

这个答案解决了我的问题。谢谢!我还想补充一点,为了更容易知道每个依赖项的版本,这个Maven命令非常有帮助。 mvn dependency:tree > tree.txt

0