u011153027
2015-05-01 04:55
采纳率: 18.8%
浏览 1.8k
已采纳

麻烦大家帮我看看这个空指针异常应该怎么改?

BaseServiceImpl:

/**
* @param hql:传入的hql,可以带?
* @param parameters:问号对应的参数数组
*/
public List getResult(String hql, Object[] parameters) {
// TODO Auto-generated method stub

    Query query = sessionFactory.getCurrentSession().createQuery(hql);
    //注入?
    if(parameters != null && parameters.length > 0){
        for(int i = 0;i < parameters.length;i ++){
            query.setParameter(i, parameters[i]);
        }
    }
    return query.list();
}

ArticleServiceImpl:
public PageBean queryForPage(int userId,int pageSize,int page){

    final String hql = "from Article where users.id=" + userId;
    int allRow = getResult(hql,null).size(); //总记录数
    int totalPage = PageBean.countTatalPage(pageSize,allRow); //总页数
    final int offset = PageBean.countOffset(pageSize, page); //当前页开始记录
    final int length = pageSize;  //每页记录数
    final int currentPage = PageBean.countCurrentPage(page); //当前页
    List<Article> list = queryForPage(hql,offset,length);

    //把分页信息保存到bean当中
    PageBean pageBean = new PageBean();
    pageBean.setPageSize(pageSize);
    pageBean.setCurrentPage(currentPage);
    pageBean.setAllRow(allRow);
    pageBean.setTotalPage(totalPage);
    pageBean.setList(list);
    pageBean.init();

    return pageBean;
}

异常信息指示:getResult方法中Query query = sessionFactory.getCurrentSession().createQuery(hql);这句话有问题和ArticleServiceImpl中的int allRow = getResult(hql,null).size(); //总记录数这句话有问题。
请大家帮我看看这个空指针异常怎么改?

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

5条回答 默认 最新

  • foreach_break 2015-05-01 05:49
    已采纳

    如果你不太会打断点,这样:
    这下面的代码中,做类似这种事情,类型你自己根据你的情况来定:

    T factory = sessionFactory;
    
    //对factory判空...
    
    T session = factory.getCurrentSession();
    
    //对session判空...
    
    T query = session.creatQuery(hql);
    
    //对query判空...
    
        Query query = sessionFactory.getCurrentSession().createQuery(hql);
        //注入?
        if(parameters != null && parameters.length > 0){
            for(int i = 0;i < parameters.length;i ++){
                query.setParameter(i, parameters[i]);
            }
        }
        return query.list();
    }
    
    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • foreach_break 2015-05-01 05:16

    请贴出调用栈和关键变量的值.

    评论
    解决 无用
    打赏 举报
  • u011153027 2015-05-01 05:27

    userId是在action中传值进去。我试了一下,
    @SuppressWarnings("unchecked")
    public int getAllRowCount(String hql){
    List list = getResult(hql,null);
    if(list != null){
    return list.size();
    }else{
    return 0;
    }
    }
    然后int allRow = getAllRowCount(hql); 也是报出空指针异常。

    评论
    解决 无用
    打赏 举报
  • foreach_break 2015-05-01 05:28

    请采纳~~~

    在这句代码上打断点breakpoint;
    然后跟getResult;

    建议你分开写:

    List<T> result = getResult(hql,null);
    //result有可能返回空,你判断了吗?
    int allRow = resultOrNull == null?0:result.size();
    
    评论
    解决 无用
    打赏 举报
  • u011153027 2015-05-01 05:35

    图片说明

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题