Boa tarde pessoal,
Ao rodar o código desse exercício, o enunciado diz que a ultima categoria deveria ser mostrada repetida, o que no meu caso não ocorreu. Existe algum detalhe que eu não percebi?
public List <Categoria> listaComProdutos() throws SQLException{
List <Categoria> categorias = new ArrayList<Categoria>();
Categoria ultima = null;
String sql = "select c.id as c_id, c.nome as c_nome, p.id as p_id, p.nome as p_nome, p.descricao as p_descricao from Categoria as c join Produto as p on p.categoria_id = c.id";
try (PreparedStatement stmt = con.prepareStatement(sql)){
stmt.execute();
try (ResultSet rs = stmt.getResultSet()){
while (rs.next()) {
int id = rs.getInt("c_id");
String nome = rs.getString("c_nome");
if(ultima==null || !ultima.getNome().equals(nome)) {
Categoria categoria = new Categoria(nome, id);
categorias.add(categoria);
ultima = categoria;
}
int p_id = rs.getInt("p_id");
String p_nome = rs.getString("p_nome");
String p_descricao = rs.getString("p_descricao");
ultima.adiciona(p_nome, p_descricao, p_id);
}
}
}
return categorias;
}
import java.sql.Connection;
import java.util.List;
public class TestaListaDAO {
public static void main(String[] args) {
List<Categoria> categorias;
ConnectionPool cp = new ConnectionPool();
try (Connection con = cp.conecta()) {
CategoriaDAO cdao = new CategoriaDAO(con);
categorias = cdao.listaComProdutos();
for (Categoria categoria : categorias) {
List<Produto> lista = categoria.getProdutos();
for (Produto produto : lista) {
System.out.println(categoria.getNome() +"-"+ produto.getNome() );
}
}
System.out.println("Total de categorias: " + categorias.size());
} catch (Exception e) {
e.printStackTrace();
}
}
}
Obrigado!