From 04a3d1021e76c8fd7664a19e65a8f18672381761 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Isidoro=20Nevares=20Mart=C3=ADn?= Date: Tue, 25 Nov 2025 13:36:16 +0100 Subject: [PATCH] cambios por CallableStatement --- sql/procedimiento-y-funcion.sql | 45 +++++++++++++++++++ src/es/palomafp/aadd/inm/GestorCine.java | 12 +++++ .../aadd/inm/dao/impl/ActorDaoJDBC.java | 17 ++++--- 3 files changed, 65 insertions(+), 9 deletions(-) create mode 100644 sql/procedimiento-y-funcion.sql diff --git a/sql/procedimiento-y-funcion.sql b/sql/procedimiento-y-funcion.sql new file mode 100644 index 0000000..8873c76 --- /dev/null +++ b/sql/procedimiento-y-funcion.sql @@ -0,0 +1,45 @@ + + +DELIMITER // + +CREATE PROCEDURE obtenerRepartoPeliculasPorActor(IN p_patron_nombre_actor VARCHAR(100)) +BEGIN + SELECT + a.nombre AS nombre_actor, + a.id_pais AS id_pais_actor, + p.titulo AS titulo_pelicula, + p.id_pais AS id_pais_pelicula, + d.nombre AS nombre_director, + d.id_pais AS id_pais_director, + d.fecha_nacimiento AS fecha_nacimiento_director + FROM reparto r + JOIN actor a ON r.id_actor = a.identificador + JOIN pelicula p ON p.identificador = r.id_pelicula + JOIN director d ON p.id_director = d.identificador + WHERE p.identificador IN ( + SELECT re.id_pelicula + FROM reparto re + JOIN actor ac ON re.id_actor = ac.identificador + JOIN pelicula pe ON re.id_pelicula = pe.identificador + WHERE ac.nombre LIKE p_patron_nombre_actor + ); +END; +// + +CREATE FUNCTION obtenerNumeroActoresPelicula(p_id_pelicula INT) +RETURNS INT +DETERMINISTIC +READS SQL DATA +BEGIN + DECLARE total_actores_pelicula INT; + + SELECT COUNT(*) INTO total_actores_pelicula + FROM reparto + WHERE id_pelicula = p_id_pelicula; + + RETURN total_actores_pelicula; +END; +// + +DELIMITER ; + diff --git a/src/es/palomafp/aadd/inm/GestorCine.java b/src/es/palomafp/aadd/inm/GestorCine.java index 956c816..5aa5e0c 100644 --- a/src/es/palomafp/aadd/inm/GestorCine.java +++ b/src/es/palomafp/aadd/inm/GestorCine.java @@ -2,7 +2,9 @@ package es.palomafp.aadd.inm; import java.util.List; +import es.palomafp.aadd.inm.dao.IActorDAO; import es.palomafp.aadd.inm.dao.IRepartoDAO; +import es.palomafp.aadd.inm.dao.impl.ActorDaoJDBC; import es.palomafp.aadd.inm.dao.impl.RepartoDaoJDBC; import es.palomafp.aadd.inm.util.ConversorTiposDatosYFormatos; import es.palomafp.aadd.inm.vo.Reparto; @@ -19,6 +21,16 @@ public class GestorCine { public static void main(String[] args) { GestorCine gc = new GestorCine(); gc.imprimirRepartoPeliculasActorTerminaEnT(); + + gc.imprimirNumeroActoresPelicula(); +} + + private void imprimirNumeroActoresPelicula() { + IActorDAO iActorDAO = new ActorDaoJDBC(); + int idPelicula = 1; // Ejemplo: película con id 1 + System.out.println("Imprimir el número de actores en la película con id " + idPelicula); + int numeroActores = iActorDAO.obtenerNumeroActoresPelicula(idPelicula); + System.out.println("Número de actores en la película con id " + idPelicula + ": " + numeroActores); } private void imprimirRepartoPeliculasActorTerminaEnT() { diff --git a/src/es/palomafp/aadd/inm/dao/impl/ActorDaoJDBC.java b/src/es/palomafp/aadd/inm/dao/impl/ActorDaoJDBC.java index 9fa9ae9..66e979f 100644 --- a/src/es/palomafp/aadd/inm/dao/impl/ActorDaoJDBC.java +++ b/src/es/palomafp/aadd/inm/dao/impl/ActorDaoJDBC.java @@ -2,7 +2,7 @@ package es.palomafp.aadd.inm.dao.impl; import java.sql.CallableStatement; import java.sql.Connection; -import java.sql.ResultSet; +import java.sql.Types; import es.palomafp.aadd.inm.dao.IActorDAO; import es.palomafp.aadd.inm.gestor.GestorConexionJDBC; @@ -22,16 +22,15 @@ public class ActorDaoJDBC implements IActorDAO { int numeroActores = 0; // try con recursos "cerrables": Connection, Statement, ResultSet try (Connection conexion = GestorConexionJDBC.obtenerConexionJDBC(); - CallableStatement cstmt = conexion.prepareCall("{call obtenerNumeroActoresPelicula(?)}");) { + CallableStatement cstmt = conexion.prepareCall("{? = call obtenerNumeroActoresPelicula(?)}");) { - // El parámetro es el patrón por el que se va a buscar - cstmt.setInt(1, idPelicula); - ResultSet resultado = cstmt.executeQuery(); + // El parámetro de salida y el de entrada + cstmt.registerOutParameter(1, Types.INTEGER); + cstmt.setInt(2, idPelicula); - if (resultado.next()) { - return 0; - - } + cstmt.execute(); + // Obtener el valor del parámetro de salida + numeroActores= cstmt.getInt(1); } catch (Exception e) { e.printStackTrace(); }