先放报错:
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;
}