ForEach returning only one object in the list

0

I have a JSP page and I want it to be a list. To do this, I created a listarTodos() method inside the DAO class and set the fields to show the data of the object, thus getting the code:

</div>

        <%  
            ProdutoDAO produtoDAO = new ProdutoDAO();
            List<Produto> produtos = produtoDAO.listarTodos();
        %>
            <table class="table table-striped table-inverse">
                <thead>
                    <tr>
                        <th>Código</th>
                        <th>Produto</th>
                        <th>Tipo de Produto</th>
                        <th>Quantidade</th>
                        <th>Preço em R$</th>
                        <th>Tipo de Negociação</th>

                    </tr>
                </thead>
                <tbody>
                    <%for(Produto produto : produtos){ %>
                    <tr>                        
                        <td><%=produto.getIdProduto()%></td>
                        <td><%=produto.getNomeProduto()%></td>
                        <td><%=produto.getTipoProduto()%></td>
                        <td><%=produto.getQtdProduto()%></td>
                        <td><%=produto.getPreco()%></td>
                        <td><%=produto.getTipoNegociacao()%></td>
                        <td>Editar</td>
                        <td><a href="prodcontroller.do?acao=excluir&input_codigo=<%=produto.getIdProduto()%>">Excluir</a></td>
                    </tr>

                    <%} %>
                </tbody>
            </table>
        </div>

The problem is that it is listing the right number of records, but it is populating all "product" objects with just one bank line. So, if I have N records there, those N records would populate the object with the same data.

Example: id: 123; product: banana: type: fruit; qnt: 6; price = 1.0; type of negotiation: sale. < ~~~~ this In the 14 objects created.

Follow the method code:

public List<Produto> listarTodos() {
        ConexaoBD conexao = new ConexaoBD();
        conexao.conecta();
        List<Produto> produtos = new ArrayList<>();
        Produto produto = new Produto();

        try {
            Statement st = conexao.conn.createStatement();
            ResultSet rs = st.executeQuery(LISTAR_TUDO);
            while(rs.next()) {          
                produto.setIdProduto(rs.getInt("id_produto"));
                produto.setNomeProduto(rs.getString("ds_tipo_produto"));
                produto.setNomeProduto(rs.getString("nm_produto"));
                produto.setQtdProduto(rs.getInt("nr_quantidade"));
                produto.setPreco(rs.getDouble("vl_preco"));
                produto.setTipoNegociacao(rs.getString("ds_tipo_negociacao"));
                produtos.add(produto);

            }
            rs.close();


        } 
        catch(SQLException ex) {
            ex.printStackTrace();
        }
        return produtos;

    }

Can you see where I'm going wrong?

    
asked by anonymous 06.09.2017 / 00:56

1 answer

0

Try changing the While of All List by creating a new instance of the Object with each result call

while(rs.next())          
   produtos.add( new Produto (rs.getInt("id_produto"),
                              rs.getString("ds_tipo_produto")) );
    
06.09.2017 / 02:01