JFinal查询表记录总数报错:java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Integer

jelly_oy 发布于 2015/06/26 17:22
阅读 2K+
收藏 0

@JFinal 你好,想跟你请教个问题:

JFinal查询表记录总数报错:

java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Integer

我是这样写的:

public class User extends Model<User> {

    public static final User me = new User();

    public int queryRegistCount(){
            String sql = "select count(1) as count from user";        
            return super.findFirst(sql).getInt("count");
    }

}

这里是详细报错信息:

[ERROR]-[Thread: 497276299@qtp-438546438-0]-[com.jfinal.core.ActionHandler.handle()]: /
java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Integer
    at com.jfinal.plugin.activerecord.Model.getInt(Model.java:187)
    at com.jelly.bbs.model.User.queryRegistCount(User.java:52)
    at com.jelly.bbs.controller.IndexController.index(IndexController.java:58)


真是不知道问题出在哪里,是我使用不当吗?

请求各位大侠指导下啊,谢谢了!

加载中
0
朋也
朋也

不用getInt了,直接返回findFirst()就可以了,不过要用Integer接收,不然如果没有数据的话会返回null,也是会报错的

0
JFinal
JFinal
     sql 中带有 count(1) 这个函数,所以 jdbc 会自动将结果由 Integer 升为 Long,所以要使用 getLong(...)来获取值,类似的情况还有 select sum(filed) 也会升为 Long,原因是防止 sum 这类函数得到的结果用 Integer 存放不下,造成数值溢出。
0
JFinal
JFinal
具体到你的这个需求,使用 Long count = Db.queryLong("select count(1) from user") ;更加方便。类似这样的统计数据的功能,使用 Db.queryXxx(...) 系列方法极好
0
jelly_oy
jelly_oy

引用来自“JFinal”的评论

     sql 中带有 count(1) 这个函数,所以 jdbc 会自动将结果由 Integer 升为 Long,所以要使用 getLong(...)来获取值,类似的情况还有 select sum(filed) 也会升为 Long,原因是防止 sum 这类函数得到的结果用 Integer 存放不下,造成数值溢出。
原来如此,谢谢波总的指导!
0
jelly_oy
jelly_oy

引用来自“JFinal”的评论

具体到你的这个需求,使用 Long count = Db.queryLong("select count(1) from user") ;更加方便。类似这样的统计数据的功能,使用 Db.queryXxx(...) 系列方法极好

波总真给力!赞一个!

相信遇到类似问题的朋友,可以找到答案了,哈哈!

返回顶部
顶部