java.sql.SQLException: java.lang.ClassCastException:java.math.BigInteger cannot be cast to java.lang

java.sql.SQLException: java.lang.ClassCastException:java.math.BigInteger cannot be cast to java.lang.Long

  • 一般原因: MySQL版本升级,但项目中jar包依然是旧版本(若你没升级过且刚刚还好好的,那就应该是代码错误)。
  • 解决办法: 在maven中配置引入依赖包,其中version采用所安装MySQL对应版本(或再新点的版本,因为有些人是要比其安装的版本新一点才有用)。

附:利用mysql命令查看版本:mysql> select version();

<dependency>
	    <groupId>mysql</groupId>
	    <artifactId>mysql-connector-java</artifactId>
	    <version>8.0.21</version>
</dependency>

如果还不行,就说明项目还是没有找到引入的新版本jar包,那就检查一下数据库配置文件,这是5升级到6以上版本要注意的变化:
MySQL5用的驱动是com.mysql.jdbc.Driver,MySQL6以后用的是com.mysql.cj.jdbc.Driver,且需要指定时区serverTimezone,指定是否需要使用SSL连接。

Class.forName("com.mysql.cj.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/test?characterEncoding=UTF-8&serverTimezone=GMT%2B8&useSSL=false";
String username = root
String password = 123456
Connection conn = DriverManager.getConnection(url, username, password);

如果设定serverTimezone=UTC,会比中国时间早8个小时,在中国可以选择GMT%2B8或者Asia/Shanghai或者Asia/Hongkong;
设置useSSL=false来显式禁用SSL连接,如果需要用SSL连接,要为服务器证书验证提供信任库,并设置useSSL=true。

以上是针对该异常的应对方法,如果还不行,还有报其他异常,可以在 https://blog.csdn.net/weixin_46109017/article/details/113749667 查看更详细更全的解决办法,可收藏和留言

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: 这是一个Java编程中的异常错误,错误信息为“java.sql.sqlexception: java.lang.classcastexception: java.math.biginteger cannot be cast to java.lang.long”。意思是Java程序中出现了类型转换错误,将一个BigInteger类型的数据强制转换成了long类型,导致出现了异常错误。需要检查程序中的类型转换操作,确保数据类型的匹配和转换正确无误。 ### 回答2: 这个错误是由于将一个 BigInteger 类型的变量尝试转换为 long 类型时引起的,而两者的数据类型不兼容。尽管 BigInteger 和 long 都是用于表示整数的 Java 数据类型,但它们的内部实现方式是不同的,这就导致了类型转换的问题。 BigInteger 类型适用于需要使用比 long 类型范围更广的整数值的情况。在 Java 中,long 的取值范围是 -2^63 ~ 2^63-1,而 BigInteger 的取值范围是无限的。因此,当我们需要处理超出长整数类型限制的整数时,我们需要使用 BigInteger 类型。 而当我们需要使用一个 BigInteger 类型的值作为 long 类型的值时,我们需要进行类型转换。但由于数据类型的范围不同,所以会出现转换错误,即 java.lang.classcastexception: java.math.biginteger cannot be cast to java.lang.long。 为了避免这种错误,我们可以使用 BigInteger 的 longValue() 方法将 BigInteger 类型的值转换为 long 类型的值。该方法返回 BigInteger 对象的 long 数值表示形式,如果 BigInteger 对象的数值超出了 long 类型的范围,则该方法将返回 long 类型的最大值或最小值。 在编程时,我们应该根据实际需求选择使用不同的整数类型,同时在进行类型转换时,应该注意数据类型的范围,避免出现类似的错误。 ### 回答3: java.sql.sqlexception异常提示出现了类型转换错误,即将一个BigInteger类型强制转换成了Long类型。这个过程中出现了ClassCastException异常,表明这种类型转换是非法的,无法进行的。原因在于BigInteger类型是Java中用来表示任意大小整数的类,而Long类型只能表示64位有符号整数。这样的类型转换精度会出现问题,从而导致转换失败。 对于这个问题的解决方法,可以考虑将BigInteger类型转换成Long类型的正确做法:使用BigInteger.longValue()方法,利用这个方法可以将BigInteger转换成Long类型,同时可以避免类型转换的精度问题。如果在程序中使用Long.parseLong()方法或者(long)BigInteger的方式进行类型转换,都会出现类型转换失败的情况。因此,针对这种错误的处理方式,需要提高程序中对类型转换的精度和正确性的要求,同时尽可能使用Java提供的类型转换方法来完成类型转换的工作。 总之,在Java编程中避免类型转换错误非常重要,这种错误很容易在代码中出现,而且会导致程序的崩溃。因此,在编写程序时应该特别注意类型转换问题,并且使用Java提供的强制类型转换的方法来保证转换的正确性和精度。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值