Quando faço a consulta usando o foreach, o último resultado aparece duas vezes. Criei duas vezes o mesmo objeto na lista?
public class ProdutoDAO {
Connection connection ;
public ProdutoDAO(Connection connection) {
this.connection = connection;
}
public void salvarProduto(Produto produto) throws SQLException {
String sql = "INSERT INTO PRODUTO (NOME, DESCRICAO) VALUES (?, ?)";
try(PreparedStatement pstm = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS)){
pstm.setString(1, produto.getNome());
pstm.setString(2, produto.getDescricao());
pstm.execute();
try(ResultSet rs = pstm.getGeneratedKeys()){
while (rs.next()) {
produto.setId(rs.getInt(1));
}
}
}
}
public List<Produto> listar() throws SQLException{
List<Produto> produtos = new ArrayList<Produto>();
String sql = "SELECT * FROM PRODUTO";
try(PreparedStatement pstm = connection.prepareStatement(sql)){
pstm.execute();
try(ResultSet rs = pstm.getResultSet()){
while (rs.next()) {
Produto produto = new Produto(rs.getInt(1), rs.getString(2), rs.getString(3));
produtos.add(produto);
}
}
}
return produtos;
}
}
public class TestaInsercaoComProduto {
public static void main(String[] args) throws SQLException {
Produto comoda = new Produto("Comoda", "Comoda Vertical");
try(Connection con = new ConnectionFactory().recuperaConexao()){
ProdutoDAO produtoDAO = new ProdutoDAO(con);
produtoDAO.salvarProduto(comoda);
List<Produto> listaDeProduto = produtoDAO.listar();
listaDeProduto.stream().forEach(produto -> System.out.println(produto));
}
System.out.println(comoda);
}
}