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条)

报告相同问题?

悬赏问题

  • ¥15 python天天向上类似问题,但没有清零
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 C#调用python代码(python带有库)
  • ¥15 矩阵加法的规则是两个矩阵中对应位置的数的绝对值进行加和
  • ¥15 活动选择题。最多可以参加几个项目?
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)