空指针异常我怎么也找不出问题

java.lang.NullPointerException
com.eshore.dao.ProductDaoImpl.findAll(ProductDaoImpl.java:33)
com.eshore.service.ProductService.findAll(ProductService.java:36)
org.apache.jsp.product_005flist2_jsp._jspService(product_005flist2_jsp.java:101)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

我是查询语句,JSP JDBC连接MYsql的,用DAO模式,
下面是报错里面这两句有问题的话的出处:

第一句:com.eshore.dao.ProductDaoImpl.findAll(ProductDaoImpl.java:33)
public List findAll(String product_name) throws Exception{
List list = new ArrayList();
String sql = "select product_id,product_name,price,info from product";
if(product_name!=null&&!"".equals(product_name)){
sql = "select product_id,product_name,price,info from product where product_name like? ";
this.pstmt.setString(1,"%" + product_name + "%");

        }
        else {
            this.pstmt = this.conn.prepareStatement(sql);
        }
     ResultSet rs = this.pstmt.executeQuery();
     Product product = null;
        while (rs.next()){
            product = new Product();
            product.setProduct_id(rs.getString(1));
            product.setProduct_name(rs.getString(2));
            product.setPrice(rs.getDouble(3));
            product.setInfo(rs.getString(4));
            list.add(product);
        }
     this.pstmt.close();
     return list;
 }

 标的是:this.pstmt.setString(1,"%" + product_name + "%");这句




 第二句:com.eshore.service.ProductService.findAll(ProductService.java:36)

public List findAll(String product_name) throws Exception{
List list = null;

    try{ 
        list = this.dao.findAll(product_name);
    }
    catch (Exception e){
        throw e;
    }
    finally {
        this.dbconn.close();
    }

    return list;
}

是里面的:list = this.dao.findAll(product_name);


在第二处可疑错中,我开始想是不是product_name是不是没判断非空,
加了if(product_name!=null&&!"".equals(product_name)){


变成:       try{ if(product_name!=null&&!"".equals(product_name)){
        list = this.dao.findAll(product_name);
    }}

什么的还是报这个错:
java.lang.NullPointerException
com.eshore.dao.ProductDaoImpl.findAll(ProductDaoImpl.java:33)
com.eshore.service.ProductService.findAll(ProductService.java:36)

9个回答

if(product_name!=null&&!"".equals(product_name)){
sql = "select product_id,product_name,price,info from product where product_name like? ";
this.pstmt.setString(1,"%" + product_name + "%");
}
else {
this.pstmt = this.conn.prepareStatement(sql);
}
product_name不是空的时候 this.pstmt 没设置值??是空的吗,你else里设置了

xiaohuan201314
Carrie丶 回复qinqinyamemeda: list 为空了,取值之前先判断list是否为空,不为空再取
大约 4 年之前 回复
xiaohuan201314
Carrie丶 回复qinqinyamemeda: java.lang.IndexOutOfBoundsException : Index: 0, Size: 0 at java.util.ArrayList.RangeCheck(ArrayList.java:546) at java.util.ArrayList.get(ArrayList.java:321) 这种错误解决比较容易!一般都是一开始就初始化了,之后就没有做过插入操作。java.util.List listObj = new java.util.ArrayList();这样的话,当你执行listObj.get(index)的时候就会抛上面的异常。习惯的写法,一般都是java.util.List listObj = null; 或加一个判断if(!listObj.isEmpty()){listObj.get(index);}.
大约 4 年之前 回复
qinqinyamemeda
qinqinyamemeda 报别的错了
大约 4 年之前 回复
qinqinyamemeda
qinqinyamemeda java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 java.util.ArrayList.rangeCheck(ArrayList.java:653) java.util.ArrayList.get(ArrayList.java:429)
大约 4 年之前 回复
qinqinyamemeda
qinqinyamemeda HTTP Status 500 - java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
大约 4 年之前 回复
qinqinyamemeda
qinqinyamemeda 按照您说的加了一句话上去之后报了别的错了。好像有作用
大约 4 年之前 回复
xiaohuan201314
Carrie丶 if(product_name!=null&&!"".equals(product_name)){ sql = "select product_id,product_name,price,info from product where product_name like? "; this.pstmt = this.conn.prepareStatement(sql);this.pstmt.setString(1,"%" + product_name + "%"); } else { this.pstmt = this.conn.prepareStatement(sql); }
大约 4 年之前 回复

PS: 数据库连接无异常,JSP页面上可以插入数据进入数据库,但是查询却不行。

你把like? "; 这里写成常量试试,不往里传值了

yc370124
yc370124 回复qinqinyamemeda: 直接写sql = "select product_id,product_name,price,info from product where product_name like '%你的变量%' "; //注释掉// this.pstmt.setString(1,"%" + product_name + "%");
大约 4 年之前 回复
qinqinyamemeda
qinqinyamemeda 怎么写哦?不太清楚您的意思
大约 4 年之前 回复

debug一下看看this.dao是不是null

再插一句,神奇的是,我如果在查询框中不输入任何东西,<%String p=request.getParameter("product_name");
out.println(p);
List ls = DAOFactory.getIEmpDAOInstance().findAll(p);
Product pr = ls.get(1);
out.println(pr.getProduct_id());
%>
他能成功地显示数据库里第一行的东西,但是只要输入东西,就传不到p里面。

this.pstmt.setString(1,"‘%" + product_name + "%’"); %左右要加单引号

yc370124
yc370124 我也很久没有用过了
大约 4 年之前 回复
xiaohuan201314
Carrie丶 回复yc370124: 是么,没试过。。。。已不用这种传值方式好久。。。
大约 4 年之前 回复
qinqinyamemeda
qinqinyamemeda 改了还是报错。。
大约 4 年之前 回复
yc370124
yc370124 回复xiaohuan201314:不用
大约 4 年之前 回复
xiaohuan201314
Carrie丶 like 后面也要加空格
大约 4 年之前 回复

先debug一下看看this.dao是不是null,我感觉你dao没有set;get;

qinqinyamemeda
qinqinyamemeda 知道了。。。看到了 dao有值
大约 4 年之前 回复
qinqinyamemeda
qinqinyamemeda 我看到连接了,我点了debug之后,右上角没有vari窗口。。
大约 4 年之前 回复
yc370124
yc370124 回复qinqinyamemeda: 不是给你链接了吗 :http://jingyan.baidu.com/article/f3e34a128842a2f5ea653551.html
大约 4 年之前 回复
qinqinyamemeda
qinqinyamemeda 就是不知道debug功能怎么用。。
大约 4 年之前 回复
yc370124
yc370124 回复qinqinyamemeda: 你先看看有没有set;get
大约 4 年之前 回复
yc370124
yc370124 回复qinqinyamemeda:http://jingyan.baidu.com/article/f3e34a128842a2f5ea653551.html
大约 4 年之前 回复
yc370124
yc370124 为啥不试试这个呢
大约 4 年之前 回复
qinqinyamemeda
qinqinyamemeda 不会用debug。。我用的是myeclipse,该怎么操作哦?
大约 4 年之前 回复

List list = null;这句错了吧,new Arraylist 不能给null赋值

qinqinyamemeda
qinqinyamemeda 改了 还是一样的报错。。。要放弃这个传值方法了么
大约 4 年之前 回复
xiaohuan201314
Carrie丶 回复qinqinyamemeda: List<Product> all=new ArrayList<Product>();
大约 4 年之前 回复
xiaohuan201314
Carrie丶 回复qinqinyamemeda:初始化new一下,不能等于null
大约 4 年之前 回复
qinqinyamemeda
qinqinyamemeda 就问该怎么改。。换别的名字 List<Product> all=null ....... return all;我试了还不行
大约 4 年之前 回复
xiaohuan201314
Carrie丶 回复xiaohuan201314: 你贴的代码我也是醉了
大约 4 年之前 回复
xiaohuan201314
Carrie丶 回复qinqinyamemeda: List list=new ArrayLIst().....我说的还不够明显么
大约 4 年之前 回复
xiaohuan201314
Carrie丶 List list=new ArrayLIst().....我说的还不够明显么
大约 4 年之前 回复
qinqinyamemeda
qinqinyamemeda 那怎么办。。
大约 4 年之前 回复

this.pstmt 这个是NULL 吧 调试看下

qq_30101695
嘉嗳玲 回复qinqinyamemeda: Debug  打断点
大约 4 年之前 回复
qinqinyamemeda
qinqinyamemeda 第一次用myeclipse,不太懂。。初学者,怎么看是不是null
大约 4 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问