Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
1
respuesta

[Duda] Java y JDBC: Trabajando con una Base de Datos Listado con Statement #1

Hola, tengo una duda respecto a la ejecucion de la excepcion de SQL cando agrego

boolean result = Statement.execute("SELECT ID, NOMBRE, CANTIDAD, PRODUCTO FROM PRODUCTO");

En donde se esta enlasando a la base de datos me dice que resulva eso con un try catch pero ya estamos tomando la excepcion desde antes para que se pueda ejecutar. el codigo completo de este seccion es el siguiente.

public List<?> listar() throws SQLException {
        Connection con = DriverManager.getConnection(
                "jdbc:mysql://localhost/control_de_stock?userTimeZone=true&serverTimeZone=UTC",
                "root",
                "Password");

        Statement statement = con.createStatement();
        boolean result = Statement.execute("SELECT ID, NOMBRE, CANTIDAD, PRODUCTO FROM PRODUCTO");

        //System.out.println(result);
        con.close();

        return new ArrayList<>();
    }

En donde la excpecion se trata aquí:

private void cargarTabla() {
        try {
        var productos = this.productoController.listar();
        } catch(SQLException e) {
            throw new RuntimeException(e);
        }
        try {
            // TODO
            // productos.forEach(producto -> modelo.addRow(new Object[] { "id", "nombre",
            // "descripcion" }));
        } catch (Exception e) {
            throw e;
        }
    }

Pero aun así me marca error, no se si alguien podria ayudarme con esto por favor.

El IDE me recomuienda tratarlo con un Try catch pero aun así al implementarlo me sigue marcando el mismo error y no entiendo por que ocurre esto Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidad

1 respuesta

¡Hola!

Gracias por compartir tu duda con nosotros. Parece que estás teniendo problemas con el manejo de la excepción de SQL en tu código Java.

En tu método listar(), estás utilizando Statement.execute() para ejecutar una consulta SQL y almacenar el resultado en la variable result. Sin embargo, Statement.execute() puede lanzar una excepción de tipo SQLException, por lo que necesitas manejar esta excepción utilizando un bloque try-catch.

En tu código, estás declarando una excepción throws SQLException en la firma del método listar(), lo cual es correcto. Sin embargo, en el cuerpo del método, estás utilizando Statement en lugar de statement para invocar el método execute(). Esto puede estar causando el error que estás experimentando.

Para solucionar este problema, asegúrate de utilizar la variable statement en lugar de Statement en la línea donde invocas execute():

boolean result = statement.execute("SELECT ID, NOMBRE, CANTIDAD, PRODUCTO FROM PRODUCTO");

Además, en el método cargarTabla(), estás capturando la excepción SQLException y lanzando una nueva excepción RuntimeException. Esto puede estar ocultando la causa original del error. Te recomendaría manejar la excepción SQLException directamente en el método cargarTabla() y realizar alguna acción específica en caso de que ocurra un error al cargar la tabla.

Por ejemplo:

private void cargarTabla() {
    try {
        var productos = this.productoController.listar();
        // TODO: Lógica para cargar la tabla con los productos
    } catch (SQLException e) {
        // Manejo de la excepción SQLException
        e.printStackTrace(); // Imprime el stack trace del error en la consola
        // Realiza alguna acción específica en caso de error, como mostrar un mensaje de error al usuario
    }
}

Recuerda que el manejo de excepciones te permite capturar y tratar errores de manera controlada, evitando que el programa se detenga abruptamente. Asegúrate de manejar adecuadamente las excepciones en tu código para garantizar un comportamiento correcto y predecible.

Espero que esta respuesta te sea de ayuda. ¡Si tienes alguna otra pregunta, no dudes en preguntar! ¡Buena suerte con tus estudios!

Espero haber ayudado y buenos estudios!

Si este post te ayudó, por favor, marca como solucionado ✓. Continúa con tus estudios! :)