开发者社区> 问答> 正文

JFinal查询表记录总数报错:java.lang.ClassCastExcep?报错

@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)


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

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

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

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

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

    引用来自“JFinal”的评论

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

    引用来自“JFinal”的评论

    具体到你的这个需求,使用Longcount=Db.queryLong("selectcount(1)fromuser");更加方便。类似这样的统计数据的功能,使用Db.queryXxx(...)系列方法极好
    2020-06-14 15:08:20
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

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