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

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)

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里设置了

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

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

再插一句,神奇的是,我如果在查询框中不输入任何东西,<%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里面。

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

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

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

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

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