Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Não exibe o nome dos produtos

No projeto a seguir, não imprime o nome e descrição dos produtos, e sim a referência dos objetos. Como corrigir?

package br.com.alura.jdbc;

import java.util.List;
import java.sql.Connection;
import java.sql.SQLException;

public class Teste {

    public static void main(String[] args) throws SQLException {

        Produto mesa = new Produto("Mesa azul", "Mesa com 4 pés");

        try (Connection con = new ConnectionPool().getConnection()){
            ProdutosDAO dao = new ProdutosDAO(con);
            dao.salva(mesa);

            List<Produto> produtos = dao.lista();
            for (Produto produto : produtos) {
                System.out.println("Existe o produto: " +produto);

            }
        }

    }
}

package br.com.alura.jdbc;

import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.List;

public class ProdutosDAO {

private final Connection con;

public ProdutosDAO(Connection con) {
    this.con = con;
}

public void salva(Produto produto) throws SQLException {        
    try(PreparedStatement stmt = con.prepareStatement("insert into Produto (nome, descricao) values (?, ?)", Statement.RETURN_GENERATED_KEYS)){

        stmt.setString(1, produto.getNome());
        stmt.setString(2, produto.getDescricao());
        stmt.execute();

        try(ResultSet rs = stmt.getGeneratedKeys()){
            if(rs.next()) {    
                int id = rs.getInt("id");
                produto.setId(id);
            }
        }
    }
}

public List<Produto> lista() throws SQLException{
    List<Produto> produtos = new ArrayList<>();
    String sql = "select * from Produto";

    try(PreparedStatement stmt = con.prepareStatement(sql)){
        stmt.execute();
        transformaResultadoEmProdutos(stmt, produtos);
    }
    return produtos;
}

private void transformaResultadoEmProdutos(PreparedStatement stmt, List<Produto> produtos) throws SQLException {
    try(ResultSet rs = stmt.getResultSet()){
        while (rs.next()) {
            int id = rs.getInt("id");
            String nome = rs.getString("nome");
            String descricao = rs.getString("descricao");
            Produto produto = new Produto(nome, descricao);
            produto.setId(id);
            produtos.add(produto);
        }
    }
}

}

package br.com.alura.jdbc;

public class Produto {

private Integer id;
private String nome;
private String descricao;

public Produto(String nome, String descricao) {
    this.nome = nome;
    this.descricao = descricao;

}

public void setId(Integer id) {
    this.id = id;
}

public String getNome() {
    return nome;
}

public String getDescricao() {
    return descricao;
}

}
1 resposta
solução!

Tópico duplicado: https://cursos.alura.com.br/forum/topico-nao-exibe-o-nome-dos-produtos-86277