2
respuestas

Error de compilacion

Hola a todos y todas, estoy siguiendo paso a paso el proyecto del instructor sin inconvenientes. Al guardar y finalizar este punto del curso, me apareció un error de compilación que no puedo solucionar. Por lo que encontré en las web es un error de versiones, pero no quiero tocar eso. Alguien puede guiarme? Imagen del ERROR

2 respuestas

Hola Martin, ¡espero que estés bien!

La excepción ClassCastException informa que un cast no fue hecho correctamente, con ejemplo del link:

Object x = new Integer(0);
System.out.println((String)x);

Entonces me gustaría ver su código de esa clase :)

Si no está seguro de cómo agregar código al tema en foro, aquí hay un tutorial: https://www.youtube.com/watch?v=tevEdARFxGU

¡Saludos!

Hola, gracias por tu respuesta. Sí, lo adjunto. El error surge en la clase ProductoController

package com.alura.jdbc.controller;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.alura.jdbc.factory.ConnectionFactory;

public class ProductoController {

    public int modificar(String nombre, String descripcion, Integer cantidad, Integer id) throws SQLException {
        ConnectionFactory factory= new ConnectionFactory();
        final Connection con = factory.recuperaConexion();
        try(con){

            final PreparedStatement statement= con.prepareStatement("UPDATE PRODUCTO SET "
                    + "NOMBRE = ?" 
                    + ", DESCRIPCION = ?"
                    + ", CANTIDAD =?"
                    + " WHERE ID= ? ");

            try(statement){
                statement.setString(1, nombre);
                statement.setString(2, descripcion);
                statement.setInt(3, cantidad);
                statement.setInt(4, id);

                statement.execute();

                int updateCount=statement.getUpdateCount();
                con.close();
                return updateCount;
            }
        }
    }

    public int eliminar(Integer id) throws SQLException {
        final Connection con = new ConnectionFactory().recuperaConexion();    
        try(con){
            final PreparedStatement statement= con.prepareStatement("DELETE FROM PRODUCTO WHERE ID = ?");
            try(statement){
                statement.setInt(1, id);
                statement.execute();

                return statement.getUpdateCount();
            }
        }

    }

    public List<Map<String, String>> listar() throws SQLException {
        final Connection con = new ConnectionFactory().recuperaConexion();
        try(con){

            final PreparedStatement statement = con.prepareStatement("SELECT ID, NOMBRE, DESCRIPCION, CANTIDAD FROM PRODUCTO");
            try(statement){
                statement.execute();


                ResultSet resultSet= statement.getResultSet();
                List<Map<String, String >> resultado = new ArrayList<>();

                while(resultSet.next()) {
                    Map<String, String>fila=new HashMap<>();

                    fila.put("id",String.valueOf(resultSet.getInt("id")));
                    fila.put("nombre",resultSet.getString("NOMBRE"));
                    fila.put("descripcion",resultSet.getString("DESCRIPCION"));
                    fila.put("cantidad",String.valueOf(resultSet.getInt("CANTIDAD")));
                    resultado.add(fila);
                }


                return resultado;
            }

        }
    }

    public void guardar(Map <String, String> producto) throws SQLException {
        String nombre = producto.get("NOMBRE");
        String descripcion = producto.get("DESCRIPCION");
        Integer cantidad = Integer.valueOf(producto.get("CANTIDAD"));
        Integer maximoCantidad=50;

        final Connection con = new ConnectionFactory().recuperaConexion();
        try(con){
            con.setAutoCommit(false);

            final PreparedStatement statement= con.prepareStatement("INSERT INTO PRODUCTO ( nombre,descripcion,cantidad)"
                    +"VALUES(?,?,?)",
                    Statement.RETURN_GENERATED_KEYS);
            try(statement){


                do {
                    int cantidadParaGuardar = Math.min(cantidad, maximoCantidad);

                    ejecutaRegistro(nombre, descripcion, cantidadParaGuardar, statement);

                    cantidad-=maximoCantidad;

                }while(cantidad > 0);

                con.commit();
                System.out.println("COMMIT");
            }catch(Exception e) {
                con.rollback();
                System.out.println("ROLLBACK");
            }



        }


    }

    private void ejecutaRegistro(String nombre, String descripcion, Integer cantidad, PreparedStatement statement)
            throws SQLException {

        if(cantidad<50) {
            throw new RuntimeException("Ocurrio un error");
        }

        statement.setString(1, nombre);
        statement.setString(2, descripcion);
        statement.setInt(3, cantidad);

        statement.execute();
        final ResultSet resultSet= statement.getGeneratedKeys();

        try(ResultSet){
            while(resultSet.next()) {
                System.out.println(
                        String.format(
                                "Fue insertado el producto de id: "+
                                        resultSet.getInt(1)));

            }
            resultSet.close();
        }
    }
}

Aprovecho a adjuntar esta imagen para que veas donde marca el error Eclipse, directamente el package Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidadMuchas gracias. Quedo al pendiente de la respuesta para poder avanzar. Muchas gracias nuevamente!