该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2009-08-24
最后修改:2009-08-24
环境说明: 测试数据库为Mysql数据库,其他数据库未知 测试语言为Java 数据库操作使用dbutils包,不知和这个是否有关
select count(id) from table这条SQL语句作用大家都明白什么作用了,本来一直认为返回值为一整形结果,但是试试胜于雄辩。 刚刚在写一个jsp程序,数据库操作使用了dbutils包,使用了select count(id) from table 这条语句计算table表中的记录数,结果使用Integer接收,运行测试,报错了 java.lang.ClassCastException: java.lang.Long
知道是类型转换的问题了,同时也迷惑的,count()的结果怎么是long类型的呢,不确定,在获取结果后面加入getClass方法,测试显示类型果真是Long类型的,这才确定count()的结果为Long类型了。但是Long类型怎么转成Integer类型呢,说实话还真没试过,在结果前面加入(Integer)强制转换,不行的哦。查文档,终于知道了原来在long类型结果后面加入.intValue()就能转换成功了。
PS:百度一下,得知hibernate版本之间也存在这个问题,在Hibernate3.0之前是Integer类型的,但是如果用了Hibernate3.0和Hibernate3.1之后就是Long类型的了,不知搞什么飞机
为了自己的学习、减少在程序上遇到类似的问题解决的需要,在此记录,以供后面的观者借鉴。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-08-24
最后修改:2009-08-24
.intValue()
另:jsp里可能不支持jdk5的autoboxing |
|
返回顶楼 | |
发表时间:2009-08-24
daquan198163 写道 .intValue()
另:jsp里可能不支持jdk5的autoboxing 对了,原来使用.SIZE明明是两条数据,却显示为64 使用.intValue()才成功 谢谢LS提醒 |
|
返回顶楼 | |
发表时间:2009-08-24
count用String接....
|
|
返回顶楼 | |
发表时间:2009-08-24
最后修改:2009-08-24
汗。。intvalue..好基本 吧?
|
|
返回顶楼 | |
发表时间:2009-09-11
不是吧,我使用的hibernate是这个版本:Hibernate-Version: 3.1.3
int num = (Integer) session.createQuery( "select count(id) from Users").uniqueResult(); 查看数据库对应用户表的记录条数,返回类型不是Long类型的,而且在项目中也没有发现转换异常 |
|
返回顶楼 | |
发表时间:2009-09-11
这帖子发在入门版里面也应该被删除吧。。。。。。。???????????????????? |
|
返回顶楼 | |
发表时间:2009-09-11
貌似MYSQL里面提取出来的数据没有INTEGER。。。。。。。。。。。。
|
|
返回顶楼 | |
发表时间:2009-09-11
用的Oracle,返回的是Long
|
|
返回顶楼 | |
发表时间:2009-09-11
。。。。。。。知道什么叫通用????? 返回值,你永远用long,不用int,不就没问题。 怕麻烦干脆, long executerSql(String sql) { Object obj=......执行查询的结果。。。。。 return Long.parseLong(obj.toString());//速度巨快,绝对不损失效率 \\int 只能到21亿,不用 } |
|
返回顶楼 | |