ClassCastException: java.math.BigInteger无法转换为java.lang.Long在连接到MySQL时
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秒)
我该如何解决这个问题?
这个问题的出现原因是在连接到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的问题。
在连接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类型,就可以解决这个问题。
问题的原因是因为在连接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