求助 jsp 查询mysql nullpointer exception错误 空指针错误 代码如下 第45行
package com.haiersoft.sta.action;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;
import com.haiersoft.sta.dao.StaDao;
import com.haiersoft.sta.form.QueryForm;
import com.haiersoft.sta.vo.QueryResult;
import com.haiersoft.sta.vo.Vo;
public class QueryAction extends DispatchAction
{
public ActionForward query(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception
{
StaDao sta = new StaDao();
//得到包含mac、ver和date的List
List qList = sta.getNewQuery();
QueryForm qf = (QueryForm)form;
//查询页面上输入的mac地址
String macName = qf.getMac().toLowerCase();
//每一条的查询结果
QueryResult qr = null;
//盛放查询结果的List
List<QueryResult> ls = new ArrayList<QueryResult>();
for (int i = 0; i <qList.size(); i++)
{
String mac = ((Map)qList.get(i)).get("MAC").toString().toLowerCase();
String ver = ((Map)qList.get(i)).get("VER").toString();
String date = ((Map)qList.get(i)).get("INSERTTIME").toString();
//如果能查到包含输入内容的mac地址
if(mac.contains(macName))
{
//将mac、ver和加入到QueryResult对象中去
qr = new QueryResult();
qr.setMac(mac);
qr.setVer(ver);
qr.setDate(date);
ls.add(qr);
}
}
//将查询结果放入request
request.setAttribute("qr", ls);
return mapping.findForward("query");
}
}
答案:我这里的45行代码是String date = ((Map)qList.get(i)).get("INSERTTIME").toString();,不知道对不对。
看了你的这段代码,觉得问题虽然不大,但还是有的,主要是变量的非空判断上有问题。如List qList = sta.getNewQuery();实际情况下,将不确定sta.getNewQuery();方法是否能够返回一个非空的list,如果返回null,下文中for (int i = 0; i <qList.size(); i++) 将抛出空指针异常。但实际上,你的这个问题不是由此处导致的,而是由循环体内的String date = ((Map)qList.get(i)).get("INSERTTIME").toString();导致的。看你的注释
//得到包含mac、ver和date的List
List qList = sta.getNewQuery();
这里的qList中的对象似乎本来就不包含INSERTTIME字段对应的值,那么你在45行代码处调用((Map)qList.get(i))取qList中第i个对象,并强制转换到Map类型,然后.get("INSERTTIME"),到此处,仍然是不会有问题的,但是你却偏偏又调用了.toString();因为.get("INSERTTIME")返回了null,在null上调用任何方法,都是要抛出空指针异常的,这也是你遇到的问题的关键。
上一个:jsp时间显示的问题!代码如下
下一个:哪位帮我看看用JSP写的代码是哪出错了