1
resposta

Garantir a saída com order by? Instanciação indevida?

Bom dia. Nos meus testes só consegui o resultado esperado ao ordenar o resultado pelo id da categoria, devido as inserções não terem seguido uma ordem. Seria essa uma boa forma de não depender da ordem de inserção dos dados para o funcionamento correto do programa, ou fiz algo errado?

public List<Categoria> buscarProdutosDeCadaCategoria() {
        List<Categoria> categorias = new ArrayList<>();
        String sql = "SELECT c.id, c.nome, p.id, p.nome, p.descricao FROM produto p LEFT JOIN categoria c ON p.categoria_id = c.id order by c.id";
        try (PreparedStatement stmt = con.prepareStatement(sql)) {
            stmt.execute();
            try (ResultSet rs = stmt.getResultSet()) {
                Categoria atual = null;
                while (rs.next()) {
                    Categoria nova = new Categoria(rs.getInt(1), rs.getString(2));
                    if (atual == null || !categorias.contains(nova)) {
                        categorias.add(nova);
                        atual = nova;
                    }
                    atual.adicionar((new Produto(rs.getInt(3), rs.getString(4), rs.getString(5))));
                }
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return categorias;
    }

Aproveitando o código acima, ainda este exercício tive outra dúvida. No meu if, verifiquei se a categoria já existia no Array de categorias a partir do método contains() e achei o código de mais fácil entendimento assim, porém ao custo de ter que instanciar diversos objetos de categoria que não serão adicionados ao Array, portanto não serão utilizados pela aplicação. Qual seria o custo disso em termos de de performance ou uso de recursos? Desde já agradeço.

1 resposta

Christian, boa tarde. Não tem problema usar o order by para ordernar o resultado da sua busca, na verdade, ele serve exatamente pra isso mesmo =), quando a performance, vai depender muito do tamanho da aplicação, se é uma consulta que será realizada muitas vezes, pode-se ter um problema.