cambios por CallableStatement

This commit is contained in:
Isidoro Nevares Martín 2025-11-25 13:36:16 +01:00
parent 657ce22c20
commit 04a3d1021e
3 changed files with 65 additions and 9 deletions

View File

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

View File

@ -2,7 +2,9 @@ package es.palomafp.aadd.inm;
import java.util.List; import java.util.List;
import es.palomafp.aadd.inm.dao.IActorDAO;
import es.palomafp.aadd.inm.dao.IRepartoDAO; 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.dao.impl.RepartoDaoJDBC;
import es.palomafp.aadd.inm.util.ConversorTiposDatosYFormatos; import es.palomafp.aadd.inm.util.ConversorTiposDatosYFormatos;
import es.palomafp.aadd.inm.vo.Reparto; import es.palomafp.aadd.inm.vo.Reparto;
@ -19,6 +21,16 @@ public class GestorCine {
public static void main(String[] args) { public static void main(String[] args) {
GestorCine gc = new GestorCine(); GestorCine gc = new GestorCine();
gc.imprimirRepartoPeliculasActorTerminaEnT(); 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() { private void imprimirRepartoPeliculasActorTerminaEnT() {

View File

@ -2,7 +2,7 @@ package es.palomafp.aadd.inm.dao.impl;
import java.sql.CallableStatement; import java.sql.CallableStatement;
import java.sql.Connection; import java.sql.Connection;
import java.sql.ResultSet; import java.sql.Types;
import es.palomafp.aadd.inm.dao.IActorDAO; import es.palomafp.aadd.inm.dao.IActorDAO;
import es.palomafp.aadd.inm.gestor.GestorConexionJDBC; import es.palomafp.aadd.inm.gestor.GestorConexionJDBC;
@ -22,16 +22,15 @@ public class ActorDaoJDBC implements IActorDAO {
int numeroActores = 0; int numeroActores = 0;
// try con recursos "cerrables": Connection, Statement, ResultSet // try con recursos "cerrables": Connection, Statement, ResultSet
try (Connection conexion = GestorConexionJDBC.obtenerConexionJDBC(); 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 // El parámetro de salida y el de entrada
cstmt.setInt(1, idPelicula); cstmt.registerOutParameter(1, Types.INTEGER);
ResultSet resultado = cstmt.executeQuery(); cstmt.setInt(2, idPelicula);
if (resultado.next()) { cstmt.execute();
return 0; // Obtener el valor del parámetro de salida
numeroActores= cstmt.getInt(1);
}
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }