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&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