开发者社区> 问答> 正文

java.lang.integer cannot be cast to java?报错

@jfinal 您好

我数据库id为自增逐渐 int类型

我在代码中getStr("id") 或者 getInt("id") 有时候这么用可以 有时候会报错 

有的时候是必须得用getLong("id")才可以

这个是怎么回事呢

展开
收起
爱吃鱼的程序员 2020-06-14 20:26:11 604 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

      当数据库字段为int型(有符号int型),但是如果在sql中使用了某些函数,jdbc会自动转型为long,例如:selectsum(money)fromaccountwhereaccountId=123。这个行为是jdbc自动做的,目的是为了防止数据溢出,因为在本例中money本来是int型,但是sum(money)以后很可能数值会超过java Integer.MAX_VALUE值。

      另一种int自动转long型是因为字段使用的是无符号int型,这两种自动转型都是jdbc自动的,jfinal未做任何干预。

      至于int型可以使用getStr读取出来,那必定是值为null,否则肯定会抛出类型转换异常。

      解决的办法通常两个:

    1:预知可能的转型,使用正确的类型变量去接收值,例如用Long变量去接收selectsum(xxx)值。

    2:使用getNumber(attr).intValue()确切一定得到 Integer值,或者使用getNumber(attr).longValue()确切一定得到Long值。

    @jfinal多谢老大实在是感动花那么久的时间码这么多字回答我的问题 

    感谢感谢回答的很清晰今天等待1.9

    我也碰到类型问题:统计时返还的数据类型List<Map<String,String >>,返还的值有{name=中性,value=22},SQL中使用了count()函数,然后用String变量接收value值时,一直包类型转换异常。

    换成用Object类型变量接收value值时,就ok了。

    楼上分析给了思路,count()返回的值是Long类型的,与Map中的<key,value>类型冲突,在SQL映射数据时,Map并没有去验证,而在取值时,则会验证,此时类型不同,就会报错。

    这只是我的个人见解,还望大牛们深入指点。

    2020-06-14 20:26:28
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载