Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Comando INNER JOIN não está listando em sequência como exemplo do professor.

O comando SELECT * FROM CATEGORIA C INNER JOIN PRODUTO P ON C.id = P.Categoria_Id; não está listando Eletronicos em sequência como exemplo apresentado pelo professor. No meu caso fica assim: Eletronicos Eletrodemoesticos Moveis Eletronicos

No caso do professor fica assim: Eletronicos Eletronicos Eletrodemoesticos Moveis

Por conta disso o aprimoramento feito na aula 7 em 7:45s não funciona comigo. O que devo fazer para listar os tipos em CATEGORIA juntos nesse novo comando?

3 respostas

Alan, boa tarde. Você poderia nos enviar o seu código? =)

solução!

Oi João. Eu consegui o que eu queria usando o comando "ORDER BY". Daí o meu código ficou o seguinte:

package br.com.alura.jdbc.dao;

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

import br.com.alura.jdbc.modelo.Categoria;
import br.com.alura.jdbc.modelo.Produto;

public class CategoriaDAO {

    private Connection connection;

    public CategoriaDAO(Connection connection) {
        this.connection = connection;

    }

    public List<Categoria> listar() throws SQLException {
        List<Categoria> categorias = new ArrayList<>();

        String sql = "SELECT id, nome FROM CATEGORIA";

        try (PreparedStatement pstm = connection.prepareStatement(sql)) {

            pstm.execute();

            try (ResultSet rst = pstm.getResultSet()) {
                while (rst.next()) {
                    Categoria categoria = new Categoria(rst.getInt(1), rst.getString(2));

                    categorias.add(categoria);
                }
            }
        }
        return categorias;

    }

    public List<Categoria> listarComProdutos() throws SQLException {

        Categoria ultima = null;        

        List<Categoria> categorias = new ArrayList<>();

        String sql = "SELECT C.id, C.nome, P.id, P.nome, P.descricao FROM CATEGORIA C INNER JOIN"
                + " PRODUTO P ON C.id = P.Categoria_Id"
                + " ORDER BY P.Categoria_Id";

        try (PreparedStatement pstm = connection.prepareStatement(sql)) {

            pstm.execute();

            try (ResultSet rst = pstm.getResultSet()) {
                while (rst.next()) {
                    if (ultima == null || !ultima.getNome().equals(rst.getString(2))) {
                        Categoria categoria = new Categoria(rst.getInt(1), rst.getString(2));
                        ultima = categoria;
                        categorias.add(categoria);
                    }                    
                    Produto produto = new Produto(rst.getInt(3), rst.getString(4), rst.getString(5));
                    ultima.adicionar(produto);
                }
            }
        }
        return categorias;
    }
}

Muito bom, Alan =)