Buscar produto na tabela

Estou com um problema ao buscar um determinado produto na tabela. Ao inserir o nome de um produto, exemplo: " feijão" e o sistema tiver mais de um tipo de feijão, ele vai retornar os produtos com o mesmo nome. Veja a seguir.

Reparem que nessa tabela existe 2 tipos de produto.

Sem%20t%C3%ADtulo

Quando eu pesquiso somente o nome “feijão” ele deveria retornar os 2 produtos associados a feijão, porém, ele retorna dois nomes iguais.

Sem%20t%C3%ADtulo1

Método de Buscar:

 public ArrayList<Produto> pesquisarProduto(String produto) {
        try {
            Produto produtos = new Produto();
            String sql = "select * from produtos where nome LIKE  ? ";

            PreparedStatement stmt = con.prepareStatement(sql);

            stmt.setString(1, "%" + produto + "%");

            ResultSet resultado = stmt.executeQuery();

            ArrayList<Produto> prod = new ArrayList<>();

            while (resultado.next()) {

                produtos.setCodigo(resultado.getInt("codigo"));
                produtos.setNome(resultado.getString("nome"));
                produtos.setPreco(resultado.getDouble("preco"));
                produtos.setQtd(resultado.getInt("qtd"));
                prod.add(produtos);

            }

            con.close();
            return prod;
        } catch (SQLException ex) {
            return null;
        }
    }

Método de busca da interface:

 public void buscarPorNome(String nome) {
        
        if(!txtBuscar.getText().equals("")){
        ProdutoDAO dados = new ProdutoDAO();
        
        DefaultTableModel modelo = new DefaultTableModel();
        
        modelo.addColumn("Código");
        modelo.addColumn("Nome");
        modelo.addColumn("Preço");
        modelo.addColumn("Quantidade");
        
        for (Produto produto : dados.pesquisarProduto(nome)) {
            modelo.addRow(new Object[]{
                produto.getCodigo(),
                produto.getNome(),
                produto.getPreco(),
                produto.getQtd(),});
            
        }
        tabelaProduto.setModel(modelo);
        
    }else{
            JOptionPane.showMessageDialog(null, "Campo Vazio");
        }
    }

Ação do botão buscar:

private void btnBuscarActionPerformed(java.awt.event.ActionEvent evt) {                                          
        // TODO add your handling code here:
        
        buscarPorNome(txtBuscar.getText());
        

    }

Vc deve criar uma nova instancia de Produto no while que percorre o ResultSet para cada item que for retornado da consulta. E, no seu código, vc está apenas sobrescrevendo os dados do mesmo objeto criado. Com isso, será retornado apenas o último item consultado.

Mude seu while para ficar assim:

while (resultado.next()) {
  Produto produto = new Produto();
  produto.setCodigo(resultado.getInt("codigo"));
  produto.setNome(resultado.getString("nome"));
  produto.setPreco(resultado.getDouble("preco"));
  produto.setQtd(resultado.getInt("qtd"));
  prod.add(produto);
}
1 curtida