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

Erro ao excluir e alterar

Olá, finalizei o curso e desenvolvi as funcionalidades, mas quando eu rodo a aplicação, não consigo excluir e nem alterar. Aparece a mensagem "Por favor, selecionar o ID".

Segue os códigos das minhas classes ProdutoController e ProdutoDAO.

public class ProdutoController {

    private ProdutoDAO produtoDAO;

    public ProdutoController() {
        Connection connection = new ConnectionFactory().recuperarConexao();
        this.produtoDAO = new ProdutoDAO(connection);
    }

    public void deletar(Integer id) {
        this.produtoDAO.deletar(id);
    }

    public void salvar(Produto produto) {
        this.produtoDAO.salvar(produto);
    }

    public List<Produto> listar() {
        return this.produtoDAO.listar();
    }

    public void alterar(String nome, String descricao, Integer id) {
        this.produtoDAO.alterar(nome, descricao, id);
    }
}

ProdutoDAO

public class ProdutoDAO {

    private Connection connection;

    public ProdutoDAO(Connection connection) {
        this.connection = connection;
    }

    public void salvar(Produto produto) {
        try {
            String sql = "INSERT INTO PRODUTO (NOME, DESCRICAO) VALUES (?, ?)";

            try (PreparedStatement pstm = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS)) {

                pstm.setString(1, produto.getNome());
                pstm.setString(2, produto.getDescricao());

                pstm.execute();

                try (ResultSet rst = pstm.getGeneratedKeys()) {
                    while (rst.next()) {
                        produto.setId(rst.getInt(1));
                    }
                }
            }
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }

    }

    public void salvarComCategoria(Produto produto) {
        try {
            String sql = "INSERT INTO PRODUTO (NOME, DESCRICAO, CATEGORIA_ID) VALUES (?, ?, ?)";

            try (PreparedStatement pstm = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS)) {

                pstm.setString(1, produto.getNome());
                pstm.setString(2, produto.getDescricao());
                pstm.setInt(3, produto.getCategoriaId());

                pstm.execute();

                try (ResultSet rst = pstm.getGeneratedKeys()) {
                    while (rst.next()) {
                        produto.setId(rst.getInt(1));
                    }
                }
            }
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }

    }

    public List<Produto> listar() {
        List<Produto> produtos = new ArrayList<Produto>();
        try {
            String sql = "SELECT ID, NOME, DESCRICAO FROM PRODUTO";

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

                trasformarResultSetEmProduto(produtos, pstm);
            }
            return produtos;
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }

    public List<Produto> buscar(Categoria ct) {
        List<Produto> produtos = new ArrayList<Produto>();
        try {

            String sql = "SELECT ID, NOME, DESCRICAO FROM PRODUTO WHERE CATEGORIA_ID = ?";

            try (PreparedStatement pstm = connection.prepareStatement(sql)) {
                pstm.setInt(1, ct.getId());
                pstm.execute();

                trasformarResultSetEmProduto(produtos, pstm);
            }
            return produtos;
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }

    public void deletar(Integer id) {
        try (PreparedStatement stm = connection.prepareStatement("DELETE FROM PRODUTO WHERE ID = ?")) {
            stm.setInt(1, id);
            stm.execute();
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }

    public void alterar(String nome, String descricao, Integer id) {
        try (PreparedStatement stm = connection
                .prepareStatement("UPDATE PRODUTO P SET P.NOME = ?, P.DESCRICAO = ? WHERE ID = ?")) {
            stm.setString(1, nome);
            stm.setString(2, descricao);
            stm.setInt(3, id);
            stm.execute();
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }

    private void trasformarResultSetEmProduto(List<Produto> produtos, PreparedStatement pstm) throws SQLException {
        try (ResultSet rst = pstm.getResultSet()) {
            while (rst.next()) {
                Produto produto = new Produto(rst.getInt(1), rst.getString(2), rst.getString(3));

                produtos.add(produto);
            }
        }
    }
}
5 respostas

Oi, André. Boa tarde!! Essa mensagem que você informou que aparece, é no console?

Olá, segue a mensagem de erro quando tento alterar ou excluir. Nesse caso, cliquei na descrição do primeiro item na tabela, alterei o texto e cliquei em alterar. Quando fiz isso apareceu essa mensagem: Por favor, selecione o ID.

Essa mesma mensagem aparece quando tento selecionar um item e clicar em excluir.

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Entendi, e no front a sua lógica está passando o ID selecionado? Pq ele vai precisar desse ID para apagar e ou atualizar as informações, certo? =)

Oi João, no código do font eu não mexi, pois o curso é de testes. O front é o mesmo disponibilizado pelo professor. Não postei aqui, pois ultrapassou o limite de 5000 caracteres.

solução!

André, bom dia. Se você alterar a mensagem, apertar em cima do ID, por exemplo, do número 1, e mandar alterar, será que funciona? Acredito que isso resolve este caso. =)