@jfinal 您好
我数据库id为自增逐渐 int类型
我在代码中getStr("id") 或者 getInt("id") 有时候这么用可以 有时候会报错
有的时候是必须得用getLong("id")才可以
这个是怎么回事呢
当数据库字段为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并没有去验证,而在取值时,则会验证,此时类型不同,就会报错。
这只是我的个人见解,还望大牛们深入指点。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。