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

Exception ao tentar rodar o TestaOperacaoComView

Ao final da aula após ter feito tudo estou ainda recebendo a seguinte exception ao tentar rodar o teste:

Exception in thread "main" java.lang.NoClassDefFoundError: com/mchange/v2/ser/Indirector
    at br.com.alura.jdbc.factory.ConnectionFactory.<init>(ConnectionFactory.java:15)
    at br.com.alura.jdbc.controller.CategoriaController.<init>(CategoriaController.java:15)
    at br.com.alura.jdbc.view.ProdutoCategoriaFrame.<init>(ProdutoCategoriaFrame.java:41)
    at br.com.alura.jdbc.TestaOperacaoComView.main(TestaOperacaoComView.java:10)
Caused by: java.lang.ClassNotFoundException: com.mchange.v2.ser.Indirector
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
    ... 4 more
1 resposta
solução!

as classes modificadas na aula, para facilitar:

#

CATEGORIACONTROLLER

package br.com.alura.jdbc.controller;

import java.sql.Connection;
import java.util.List;

import br.com.alura.jdbc.dao.CategoriaDAO;
import br.com.alura.jdbc.factory.ConnectionFactory;
import br.com.alura.jdbc.modelo.Categoria;

public class CategoriaController {

private CategoriaDAO categoriaDAO;

public CategoriaController() {
Connection connection = new ConnectionFactory().recuperarConexao();
this.categoriaDAO = new CategoriaDAO(connection); 
}

public List<Categoria> listar() {
    return this.categoriaDAO.listar();
}
}

CONNECTIONFACTORY

package br.com.alura.jdbc.factory;

import java.sql.Connection;
import java.sql.SQLException;

import javax.sql.DataSource;

import com.mchange.v2.c3p0.ComboPooledDataSource;

public class ConnectionFactory {

    public DataSource dataSource;

    public ConnectionFactory() {
        ComboPooledDataSource comboPooledDataSource = new ComboPooledDataSource();
        comboPooledDataSource.setJdbcUrl("jdbc:mysql://localhost/loja_virtual?useTimezone=true&serverTimezone=UTC");
        comboPooledDataSource.setUser("root");
        comboPooledDataSource.setPassword("root");

        this.dataSource = comboPooledDataSource;
    }

    public Connection recuperarConexao() {
    try {
        return this.dataSource.getConnection();
    } catch (SQLException e) {
        throw new RuntimeException(e);
    }
    }
}

CATEGORIADAO


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()  {
        try {
            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;
        } catch(SQLException e) {
            throw new RuntimeException(e);
        }

    }

    public List<Categoria> listarComProduto() 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";

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

                        categorias.add(categoria);
                        ultima = categoria;
                    }
                    Produto produto = new Produto(rst.getInt(3), rst.getString(4), rst.getString(5));
                    ultima.adicionar(produto);
                }
            }
            return categorias;
        }
    }
}

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software