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

时间:2017-09-09 13:37:32

标签: java mysql jdbc

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

我该如何解决这个问题?

6 个答案:

答案 0 :(得分:21)

您的错误清楚地表明无法进行转换,因为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。

答案 1 :(得分:3)

上述注释中提到的5.1.45并不存在此问题。可从以下位置下载

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

答案 2 :(得分:2)

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

答案 3 :(得分:1)

对于我来说,更新连接器还不够,即使错误消息没有提及此问题,我也必须使用所有参数来完成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。

答案 4 :(得分:1)

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

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

答案 5 :(得分:0)

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