qinqinyamemeda 2016-08-30 05:10 采纳率: 0%
浏览 1782
已采纳

为什么检索出来的list列表为空,或者来人教我别的查询方法吗。。

先放报错:
java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
java.util.ArrayList.rangeCheck(ArrayList.java:653)
java.util.ArrayList.get(ArrayList.java:429)
org.apache.jsp.product_005flist2_jsp._jspService(product_005flist2_jsp.java:103)
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页面是输入名称进行查询的,把名称传递到这个查询的页面,再进行查询,我是这么写的:

<%String p=request.getParameter("product_name");
List<Product> ls = DAOFactory.getIEmpDAOInstance().findAll(p);  
Product pr=ls.get(0);
out.println(pr.getProduct_id());
 %>

然后我把后面的删去,println那个p,是有值的,意思是下面那句话findAll出来的东西是空的,如果我什么都不输入,查询的结果就是整个数据库的第一行的那个id是可以的,但是无论我输入什么已有的name,都说我列表空的,检索超范围。

附List和findAll的bean。

package com.eshore.dao;
import java.sql.*;
import java.util.*;
import com.eshore.pojo.Product;

public class ProductDaoImpl implements ProductDao {
private Connection conn = null;
private PreparedStatement pstmt = null;
public ProductDaoImpl(Connection conn){
this.conn = conn;
}

 public boolean addProduct(Product product) throws Exception{
     boolean flag = false ;
     String sql =" insert into product(product_id,product_name,price,info) values(?,?,?,?)";
     this.pstmt = this.conn.prepareStatement(sql);
     this.pstmt.setString(1,product.getProduct_id());
     this.pstmt.setString(2,product.getProduct_name());
     this.pstmt.setDouble(3,product.getPrice());
     this.pstmt.setString(4,product.getInfo());

        if (this.pstmt.executeUpdate()>0) { flag = true; }
        this.pstmt.close();
        return flag;

 }

 public List<Product> findAll(String product_name) throws Exception{
     List<Product> list = new ArrayList<Product>();
     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 = this.conn.prepareStatement(sql);
            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;
 }


 public Product findByProductId(String product_id) throws Exception{
     Product product = null;
     String sql ="select product_id,product_name,price,info from product where product_id =?";
     this.pstmt = this .conn .prepareStatement(sql);
     this.pstmt.setString(1, product_id);
     ResultSet rs = this.pstmt.executeQuery();
        if (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));
        }
     this.pstmt.close();
     return product ;
 }

}

public List<Product> findAll(String product_name) throws Exception{
    List<Product> all=null;

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

    return all;
}
  • 写回答

4条回答 默认 最新

  • lishihong108 2016-08-30 06:55
    关注

    你可以把的你sql语句like这条直接放在数据库里面查询看看有没有数据?你这个很可能是编码引起的问题,你查询的汉字的编码和数据库里面的编码不一致,导致每次根据product_name查询时候什么都没查到

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料