can';在JavaEE中无法正确读取ArrayList
我试图理解为什么从SQL查询构建的ArrayList在传递到Servlet时无法正确读取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
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();