From 9e6a53937fe89027712e637f74edb217a1c32ecb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Isidoro=20Nevares=20Mart=C3=ADn?= Date: Fri, 14 Nov 2025 12:45:50 +0100 Subject: [PATCH] Implementaciones IPaisDAO y IREpartoDAO --- .classpath | 2 +- config/conf.properties | 0 config/config.properties | 5 + src/es/palomafp/aadd/inm/GestorCine.java | 22 +++-- .../aadd/inm/dao/impl/PaisDaoGeneral.java | 22 ----- .../aadd/inm/dao/impl/PaisDaoJAR.java | 41 ++++++++ .../aadd/inm/dao/impl/RepartoDaoGeneral.java | 51 ---------- .../aadd/inm/dao/impl/RepartoDaoJDBC.java | 99 +++++++++++++++++++ .../gestor/GestorFicheroConfiguracion.java | 7 +- .../util/ConversorTiposDatosYFormatos.java | 25 +++++ 10 files changed, 188 insertions(+), 86 deletions(-) delete mode 100644 config/conf.properties create mode 100644 config/config.properties delete mode 100644 src/es/palomafp/aadd/inm/dao/impl/PaisDaoGeneral.java create mode 100644 src/es/palomafp/aadd/inm/dao/impl/PaisDaoJAR.java delete mode 100644 src/es/palomafp/aadd/inm/dao/impl/RepartoDaoGeneral.java create mode 100644 src/es/palomafp/aadd/inm/dao/impl/RepartoDaoJDBC.java create mode 100644 src/es/palomafp/aadd/inm/util/ConversorTiposDatosYFormatos.java diff --git a/.classpath b/.classpath index 7f50c29..46fcc12 100644 --- a/.classpath +++ b/.classpath @@ -18,6 +18,6 @@ - + diff --git a/config/conf.properties b/config/conf.properties deleted file mode 100644 index e69de29..0000000 diff --git a/config/config.properties b/config/config.properties new file mode 100644 index 0000000..5abecf6 --- /dev/null +++ b/config/config.properties @@ -0,0 +1,5 @@ +# Par醡etros de conexi髇 a la base de datos 'Cine' en SGDB MySQL +jdbc.driver = com.mysql.cj.jdbc.Driver +jdbc.url = jdbc:mysql://192.168.1.36:3306/Cine +jdbc.usuario = root +jdbc.password = mysql_123 diff --git a/src/es/palomafp/aadd/inm/GestorCine.java b/src/es/palomafp/aadd/inm/GestorCine.java index e2a0788..014051a 100644 --- a/src/es/palomafp/aadd/inm/GestorCine.java +++ b/src/es/palomafp/aadd/inm/GestorCine.java @@ -3,7 +3,8 @@ package es.palomafp.aadd.inm; import java.util.List; import es.palomafp.aadd.inm.dao.IRepartoDAO; -import es.palomafp.aadd.inm.dao.impl.RepartoDaoGeneral; +import es.palomafp.aadd.inm.dao.impl.RepartoDaoJDBC; +import es.palomafp.aadd.inm.util.ConversorTiposDatosYFormatos; import es.palomafp.aadd.inm.vo.Reparto; /** @@ -21,16 +22,19 @@ public class GestorCine { } private void imprimirRepartoPeliculasActorTerminaEnT() { - IRepartoDAO iRepartoDAO = new RepartoDaoGeneral(); + IRepartoDAO iRepartoDAO = new RepartoDaoJDBC(); List listaReparto = iRepartoDAO.obtenerListaRepartoPeliculasNombreActorTerminaT(); for (Reparto reparto : listaReparto) { - System.out.println(reparto); +// System.out.println(reparto); String textoImprimir = """ - %s, que naci贸 en %s (%s), - particip贸 en la pel铆cula '%s', rodada - en %s (%s) y dirigida por %d - que naci贸 en %s (%s) el %s. + %s, que naci贸 en %s (%s), particip贸 en la pel铆cula + '%s', rodada en %s (%s) y dirigida por + %s que naci贸 en %s (%s) el %s. """; + String fechaNacimientoFormateada = null; + if (reparto.getPelicula().getDirector().getFechaNacimiento()!=null) { + ConversorTiposDatosYFormatos.convertirDateAString(reparto.getPelicula().getDirector().getFechaNacimiento(), "dd/MM/yyyy"); + } textoImprimir= String.format(textoImprimir, reparto.getActor().getNombre(), reparto.getActor().getPaisNacimiento().getNombre(), reparto.getActor().getPaisNacimiento().getContinente().getNombre(), @@ -38,8 +42,8 @@ public class GestorCine { reparto.getPelicula().getPaisLocalizacion().getContinente().getNombre(), reparto.getPelicula().getDirector().getNombre(), reparto.getPelicula().getDirector().getPaisNacimiento().getNombre(), - reparto.getPelicula().getDirector().getPaisNacimiento().getContinente(), - reparto.getPelicula().getDirector().getFechaNacimiento()); + reparto.getPelicula().getDirector().getPaisNacimiento().getContinente().getNombre(), + fechaNacimientoFormateada); System.out.println(textoImprimir); } } diff --git a/src/es/palomafp/aadd/inm/dao/impl/PaisDaoGeneral.java b/src/es/palomafp/aadd/inm/dao/impl/PaisDaoGeneral.java deleted file mode 100644 index e681899..0000000 --- a/src/es/palomafp/aadd/inm/dao/impl/PaisDaoGeneral.java +++ /dev/null @@ -1,22 +0,0 @@ -package es.palomafp.aadd.inm.dao.impl; - -import es.palomafp.aadd.inm.dao.IPaisDAO; -import es.palomafp.aadd.inm.vo.Pais; - -/** -* -* PaisDaoGeneral: Clase que representa la implementaci贸n de un Pais -* -* @author Isidoro Nevares Mart铆n - IES Virgen de la Paloma -* @date 2 oct 2025 -*/ - -public class PaisDaoGeneral implements IPaisDAO{ - - @Override - public Pais obtenerPais(int identificadorPais) { - // TODO Auto-generated method stub - return null; - } - -} diff --git a/src/es/palomafp/aadd/inm/dao/impl/PaisDaoJAR.java b/src/es/palomafp/aadd/inm/dao/impl/PaisDaoJAR.java new file mode 100644 index 0000000..12f64ed --- /dev/null +++ b/src/es/palomafp/aadd/inm/dao/impl/PaisDaoJAR.java @@ -0,0 +1,41 @@ +package es.palomafp.aadd.inm.dao.impl; + +import es.palomafp.aadd.inm.dao.IPaisDAO; +import es.palomafp.aadd.inm.vo.Continente; +import es.palomafp.aadd.inm.vo.Pais; +import inm.mapamundi.dao.impl.PaisINMDaoJDBC; +import inm.mapamundi.inm.dao.IPaisINMDAO; + +/** + * + * PaisDaoGeneral: Clase que representa la implementaci贸n de un Pais + * + * @author Isidoro Nevares Mart铆n - IES Virgen de la Paloma + * @date 2 oct 2025 + */ + +public class PaisDaoJAR implements IPaisDAO { + + @Override + public Pais obtenerPais(int identificadorPais) { + Pais pais = null; + IPaisINMDAO paisINMDAO = new PaisINMDaoJDBC(); + inm.mapamundi.vo.Pais paisINM = paisINMDAO.obtenerPaisPorID(identificadorPais); + if (paisINM != null) { + // Informaci贸n del Continente + Continente continente = new Continente(); + continente.setCodigo(paisINM.getContinente().getCodigo()); + continente.setNombre(paisINM.getContinente().getNombre()); + + // Informaci贸n del Pa铆s + pais = new Pais(); + pais.setIdentificador(identificadorPais); + pais.setNombre(paisINM.getNombre()); + pais.setCapital(paisINM.getCapital()); + + pais.setContinente(continente); + } + return pais; + } + +} diff --git a/src/es/palomafp/aadd/inm/dao/impl/RepartoDaoGeneral.java b/src/es/palomafp/aadd/inm/dao/impl/RepartoDaoGeneral.java deleted file mode 100644 index 179b8b4..0000000 --- a/src/es/palomafp/aadd/inm/dao/impl/RepartoDaoGeneral.java +++ /dev/null @@ -1,51 +0,0 @@ -package es.palomafp.aadd.inm.dao.impl; - -import java.sql.Connection; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.sql.Statement; -import java.util.ArrayList; -import java.util.List; - -import es.palomafp.aadd.inm.dao.IRepartoDAO; -import es.palomafp.aadd.inm.gestor.GestorConexionJDBC; -import es.palomafp.aadd.inm.vo.Reparto; - -/** -* -* RepartoDaoGeneral: Clase que representa la implementaci贸n de un Reparto -* -* @author Isidoro Nevares Mart铆n - IES Virgen de la Paloma -* @date 2 oct 2025 -*/ - -public class RepartoDaoGeneral implements IRepartoDAO{ - - @Override - public List obtenerListaRepartoPeliculasNombreActorTerminaT() { - List listaReparto=null; - String sentenciaSQL = """ - SELECT * - FROM T_PAIS p join T_CONTINENTE c - on cod_continente= codigo - WHERE identificador=107 - """; - - // try con recursos "cerrables": Connection, Statement, ResultSet - try (Connection conexion = GestorConexionJDBC.obtenerConexionJDBC(); - Statement stm = conexion.createStatement(); - ResultSet resultado = stm.executeQuery(sentenciaSQL);) { - listaReparto= new ArrayList(); - while (resultado.next()) { - // Completar los atributos de Reparto - Reparto reparto = new Reparto(); - - listaReparto.add(reparto); - } - } catch (SQLException e) { - e.printStackTrace(); - } - return listaReparto; - } - -} diff --git a/src/es/palomafp/aadd/inm/dao/impl/RepartoDaoJDBC.java b/src/es/palomafp/aadd/inm/dao/impl/RepartoDaoJDBC.java new file mode 100644 index 0000000..5119156 --- /dev/null +++ b/src/es/palomafp/aadd/inm/dao/impl/RepartoDaoJDBC.java @@ -0,0 +1,99 @@ +package es.palomafp.aadd.inm.dao.impl; + +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import es.palomafp.aadd.inm.dao.IPaisDAO; +import es.palomafp.aadd.inm.dao.IRepartoDAO; +import es.palomafp.aadd.inm.gestor.GestorConexionJDBC; +import es.palomafp.aadd.inm.vo.Actor; +import es.palomafp.aadd.inm.vo.Director; +import es.palomafp.aadd.inm.vo.Pais; +import es.palomafp.aadd.inm.vo.Pelicula; +import es.palomafp.aadd.inm.vo.Reparto; + +/** +* +* RepartoDaoGeneral: Clase que representa la implementaci贸n de un Reparto con JDBC +* +* @author Isidoro Nevares Mart铆n - IES Virgen de la Paloma +* @date 2 oct 2025 +*/ + +public class RepartoDaoJDBC implements IRepartoDAO{ + + @Override + public List obtenerListaRepartoPeliculasNombreActorTerminaT() { + List listaReparto=null; + String sentenciaSQL = """ + 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 '%t'); + """; + + // try con recursos "cerrables": Connection, Statement, ResultSet + try (Connection conexion = GestorConexionJDBC.obtenerConexionJDBC(); + Statement stm = conexion.createStatement(); + ResultSet resultado = stm.executeQuery(sentenciaSQL);) { + listaReparto= new ArrayList(); + while (resultado.next()) { + IPaisDAO paisDAO = new PaisDaoJAR(); + // Informaci贸n del Actor + String nombreActor = resultado.getString("nombre_actor"); + int idPaisNacimientoActor = resultado.getInt("id_pais_actor"); + Pais paisNacimientoActor = paisDAO.obtenerPais(idPaisNacimientoActor); + Actor actor = new Actor(); + actor.setNombre(nombreActor); + actor.setPaisNacimiento(paisNacimientoActor); + + // Informaci贸n del Director + String nombreDirector = resultado.getString("nombre_director"); + int idPaisNacimientoDirector= resultado.getInt("id_pais_director"); + Pais paisNacimientoDirector = paisDAO.obtenerPais(idPaisNacimientoDirector); + Date fechaNacimientoDirector= resultado.getDate("fecha_nacimiento_director"); + Director director = new Director(); + director.setNombre(nombreDirector); + director.setPaisNacimiento(paisNacimientoDirector); + director.setFechaNacimiento(fechaNacimientoDirector); + + // Informaci贸n de la Pel铆cula + String tituloPelicula = resultado.getString("titulo_pelicula"); + int idPaisLocalizacionPelicula= resultado.getInt("id_pais_pelicula"); + Pais paisLocalizacionPelicula = paisDAO.obtenerPais(idPaisLocalizacionPelicula); + Pelicula pelicula = new Pelicula(); + pelicula.setTitulo(tituloPelicula); + pelicula.setPaisLocalizacion(paisLocalizacionPelicula); + pelicula.setDirector(director); + + + // Completar los atributos de Reparto + Reparto reparto = new Reparto(); + reparto.setActor(actor); + reparto.setPelicula(pelicula); + + listaReparto.add(reparto); + } + } catch (SQLException e) { + e.printStackTrace(); + } + return listaReparto; + } + +} diff --git a/src/es/palomafp/aadd/inm/gestor/GestorFicheroConfiguracion.java b/src/es/palomafp/aadd/inm/gestor/GestorFicheroConfiguracion.java index bd2a0b6..3a92bc9 100644 --- a/src/es/palomafp/aadd/inm/gestor/GestorFicheroConfiguracion.java +++ b/src/es/palomafp/aadd/inm/gestor/GestorFicheroConfiguracion.java @@ -1,5 +1,6 @@ package es.palomafp.aadd.inm.gestor; +import java.io.FileInputStream; import java.util.Properties; /** @@ -11,7 +12,7 @@ import java.util.Properties; * @date 31 oct 2025 */ public class GestorFicheroConfiguracion { - private static final String RUTA_FICHERO_CONFIGURACION = "config/conf.properties"; + private static final String RUTA_FICHERO_CONFIGURACION = "config/config.properties"; private static Properties propiedades; private GestorFicheroConfiguracion() { @@ -21,10 +22,10 @@ public class GestorFicheroConfiguracion { propiedades= new Properties(); try { // Fichero que est谩 en el classpath - propiedades.load(GestorFicheroConfiguracion.class.getClassLoader().getResourceAsStream(RUTA_FICHERO_CONFIGURACION)); + //propiedades.load(GestorFicheroConfiguracion.class.getClassLoader().getResourceAsStream(RUTA_FICHERO_CONFIGURACION)); // Fichero con ruta relativa al proyecto -// propiedades.load(new FileInputStream(RUTA_FICHERO_CONFIGURACION)); + propiedades.load(new FileInputStream(RUTA_FICHERO_CONFIGURACION)); } catch (Exception e) { e.printStackTrace(); } diff --git a/src/es/palomafp/aadd/inm/util/ConversorTiposDatosYFormatos.java b/src/es/palomafp/aadd/inm/util/ConversorTiposDatosYFormatos.java new file mode 100644 index 0000000..b6488a3 --- /dev/null +++ b/src/es/palomafp/aadd/inm/util/ConversorTiposDatosYFormatos.java @@ -0,0 +1,25 @@ +package es.palomafp.aadd.inm.util; + +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.Date; + +/** + * + * ConversorTiposDatos: Clase que realiza conversiones entre tipos de datos y formatos. + * @author Isidoro Nevares Mart铆n - IES Virgen de la Paloma + * @date 14 nov 2025 + * + * + */ + +public class ConversorTiposDatosYFormatos { + public static String convertirDateAString(Date fecha, String formato) { + String fechaFormateada = null; + fechaFormateada= LocalDate.parse(fecha.toString()) + .format(DateTimeFormatter.ofPattern(formato)); + + return fechaFormateada; + } +} +