问题描述
- 麻烦大家帮我看看这个空指针异常应该怎么改?
-
BaseServiceImpl:/**
* @param hql:传入的hql,可以带?
* @param parameters:问号对应的参数数组
*/
public List getResult(String hql, Object[] parameters) {
// TODO Auto-generated method stubQuery 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(); //总记录数这句话有问题。
请大家帮我看看这个空指针异常怎么改?
解决方案
如果你不太会打断点,这样:
这下面的代码中,做类似这种事情,类型你自己根据你的情况来定:
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();
}
解决方案二:
请贴出调用栈和关键变量的值.
解决方案三:
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); 也是报出空指针异常。
解决方案四:
请采纳~~~
在这句代码上打断点breakpoint;
然后跟getResult;
建议你分开写:
List<T> result = getResult(hql,null);
//result有可能返回空,你判断了吗?
int allRow = resultOrNull == null?0:result.size();