can';在JavaEE中无法正确读取ArrayList

can';在JavaEE中无法正确读取ArrayList,java,object,servlets,arraylist,Java,Object,Servlets,Arraylist,我试图理解为什么从SQL查询构建的ArrayList在传递到Servlet时无法正确读取 public ArrayList<Product> showEntireStock() throws BusinessException{ ArrayList<Product> listeProduct = new ArrayList<Product>(); try(Connection cnx =ConnectionProvider.getConn

我试图理解为什么从SQL查询构建的ArrayList在传递到Servlet时无法正确读取

public ArrayList<Product> showEntireStock() throws BusinessException{

    ArrayList<Product> listeProduct = new ArrayList<Product>();


    try(Connection cnx =ConnectionProvider.getConnection(); PreparedStatement st = cnx.prepareStatement(SHOW_ALL);) {
        ResultSet rs= null;
        Product liquide = new Liquid();


        rs= st.executeQuery();

    while(rs.next()) {

            liquide.setNom(rs.getString("nameProduct"));
            liquide.setDesignation(rs.getString("designationProduct"));
            liquide.setCategory(rs.getInt("categorieProduct"));
            liquide.setId(rs.getInt("idProduct"));
            **System.out.println(liquide.toString());**
            listeProduct.add(liquide);

        }

    }catch(Exception e) {


        BusinessException busy = new BusinessException();
        busy.ajouterErreur(ListeCodeErreur.STOCK_VIDE);
        busy.printStackTrace();
    }

    return listeProduct;

}
但当我尝试在Servelt中读取它时,ArrayList中包含的Product对象的toString()方法只显示最后一个元素,并按ArrayList中对象的数量打印它

@WebServlet("/Stock")
public class Stock extends HttpServlet {
    private static final long serialVersionUID = 1L;



    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        StockDAOImpl stock = new StockDAOImpl();
        ArrayList<Product> listeProduct = new ArrayList<>();


        try {
            listeProduct = stock.showEntireStock();
            request.setAttribute("stock", listeProduct);

    for (Product p : listeProduct) {

        System.out.println(p.toString());
    }
        } catch (BusinessException e1) {

            e1.printStackTrace();
        }


    this.getServletContext().getRequestDispatcher("/WEB-INF/Stock.jsp").forward(request, response);


    }

我不知道它为什么这么做,也找不到一篇能给出提示的文章。也没有错误消息。谢谢你的帮助

在每次迭代中覆盖相同的对象。您必须在迭代中创建一个新对象。因此,构造函数调用必须插入
while
循环

        rs= st.executeQuery();

    while(rs.next()) {
            Product liquide = new Liquid();

            liquide.setNom(rs.getString("nameProduct"));
            liquide.setDesignation(rs.getString("designationProduct"));
            liquide.setCategory(rs.getInt("categorieProduct"));
            liquide.setId(rs.getInt("idProduct"));
            **System.out.println(liquide.toString());**
            listeProduct.add(liquide);

        }

showEntireStock
中,您只能创建一个
产品
并将其添加到
ArrayList

您正在创建一个产品,对其进行更改,将其添加到列表中,然后更改同一产品并再次添加

您需要在循环的每个迭代中创建一个新产品。移动

Product liquide = new Liquid();

到循环的内部

当然!非常感谢你!它现在真的能用了…很多很多很多!!
        rs= st.executeQuery();

    while(rs.next()) {
            Product liquide = new Liquid();

            liquide.setNom(rs.getString("nameProduct"));
            liquide.setDesignation(rs.getString("designationProduct"));
            liquide.setCategory(rs.getInt("categorieProduct"));
            liquide.setId(rs.getInt("idProduct"));
            **System.out.println(liquide.toString());**
            listeProduct.add(liquide);

        }
Product liquide = new Liquid();