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

Não exibe o nome dos produtos

No projeto a seguir, não exibe o nome e descrição dos produtos. Imprime apenas 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!

Na classe Produto você precisa implementar o método toString().