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;
}
}