对于jfinal中java.lang.Long cannot be cast to java.lang.Integer的解决方法
2016-04-13 15:48
489 查看
@Jfinal 老大提供的解决方法
当数据库字段为 int 型(有符号int型),但是如果在 sql 中使用了某些函数,jdbc 会自动转型为 long,例如:select sum(money) from account where accountId = 123。这个行为是 jdbc自动做的,目的是为了防止数据溢出,因为在本例中 money 本来是 int 型,但是 sum(money) 以后很可能数值会超过 java Integer.MAX_VALUE值。另一种 int 自动转 long 型是因为字段使用是无符号 int 型,这两种自动转型都是 jdbc 自动的,jfinal 未做任何干预。至于 int 型可以使用 getStr 读取出来,那必定是值为 null, 否则肯定会抛出类型转换异常。
2:使用 getNumber(attr).intValue() 确切一定得到 Integer 值,或者使用 getNumber(attr).longValue() 确切一定得到 Long 值。
当数据库字段为 int 型(有符号int型),但是如果在 sql 中使用了某些函数,jdbc 会自动转型为 long,例如:select sum(money) from account where accountId = 123。这个行为是 jdbc自动做的,目的是为了防止数据溢出,因为在本例中 money 本来是 int 型,但是 sum(money) 以后很可能数值会超过 java Integer.MAX_VALUE值。另一种 int 自动转 long 型是因为字段使用是无符号 int 型,这两种自动转型都是 jdbc 自动的,jfinal 未做任何干预。至于 int 型可以使用 getStr 读取出来,那必定是值为 null, 否则肯定会抛出类型转换异常。
解决的办法通常两个:
1:预知可能的转型,使用正确的类型变量去接收值,例如用 Long变量去接收 select sum(xxx)值。2:使用 getNumber(attr).intValue() 确切一定得到 Integer 值,或者使用 getNumber(attr).longValue() 确切一定得到 Long 值。
相关文章推荐
- 机器学习:LibSVM与weka在eclipse中的使用
- MyEclipse------制作通讯录
- 学习java要从多方面入手!
- struts2 跳转类型 result type=chain、dispatcher、redirect(redirect-action)_forever
- java_thread
- Spring 中 AbstractExcelView 支持根据模板生成Excel文件. 通过设置 view 的 URL 属性指定模板的路径
- eclipse配置jdk源码
- Java 输入
- 第06篇 MyEclipse 2016 安装/破解
- Java数据类型
- java书籍推荐
- java Pattern和Matcher详解
- java设计模式之装饰模式代理模式区别
- java泛型
- java泛型方法的使用
- java并发:线程同步机制之Volatile关键字&原子操作Atomic
- Struts2 获取 Session对象
- JAVA的可变参数,参数中有三个点
- Java基础:运行时异常和非运行时异常
- Java多线程(2) 同步