classcastexception:java.math.biginteger无法在连接到mysql时转换为java.lang.long

dgtucam1  于 2021-06-19  发布在  Mysql
关注(0)|答案(4)|浏览(458)

当连接到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)

我怎样才能解决这个问题?

oo7oh9g9

oo7oh9g91#

上述评论中提到的5.1.45中没有此问题。可从以下网址下载:,
https://repo1.maven.org/maven2/mysql/mysql-connector-java/5.1.45/

b1zrtrql

b1zrtrql2#

您的mysql版本可能是最新的8.0.19,但mysql驱动程序文件的旧版本可能是5.1.23,这通常在netbeans ide中可用。要克服这个问题,请从pc下载连接器/J5.1.48 zip文件(4.6mb)中的这个链接下载mysql-connector-java-5.1.48.jar
现在右键单击netbeanside中的项目名称,转到services,在其中选择“libraries”,在其中选择“add library”,然后不要选择可用的库(下拉菜单将列出一个jdbcdriver文件,其中包含“mysql-connector-java-5.1.23.jar”文件,这是一个旧版本,这会导致不匹配)。因此,请单击“create library”,然后选择任意名称,然后单击“create”按钮,将弹出一个浏览窗口,转到下载了“mysql-connector-java-5.1.48.zip”文件夹的目录,打开它,选择java jar文件“mysql-connector-java-5.1.48.jar”,然后单击“确定”。项目树的library文件夹现在将显示“jdbcdriver-mysql-connector-java-5.1.48.jar”,添加到库列表中(jdk和tomcat)。现在,通过单击“run”按钮再次尝试连接到您的数据库,转到jsp链接,您会看到这一次您已连接。

z18hc3ub

z18hc3ub3#

您的错误清楚地表明不可能强制转换,因为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。

neskvpey

neskvpey4#

对我来说,更新连接器是不够的,我还必须完成我的任务 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
在netbeans上使用java。

相关问题