Evolución del DAO

This commit is contained in:
Isidoro Nevares Martín 2025-11-06 13:09:14 +01:00
parent 850580e835
commit 0ceb18ba02
24 changed files with 257 additions and 47 deletions

2
.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
/target/
*.class

View File

@ -1,13 +1,13 @@
eclipse.preferences.version=1 eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 org.eclipse.jdt.core.compiler.codegen.targetPlatform=24
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
org.eclipse.jdt.core.compiler.compliance=1.8 org.eclipse.jdt.core.compiler.compliance=24
org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.lineNumber=generate
org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate
org.eclipse.jdt.core.compiler.debug.sourceFile=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate
org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
org.eclipse.jdt.core.compiler.release=disabled org.eclipse.jdt.core.compiler.release=disabled
org.eclipse.jdt.core.compiler.source=1.8 org.eclipse.jdt.core.compiler.source=24

View File

@ -1,5 +0,0 @@
# Parámetros de conexión a la base de datos MapaMundi en SGDB MySQL
jdbc.driver = com.mysql.cj.jdbc.Driver
jdbc.url = jdbc:mysql://192.168.1.35:3306/Mapamundi
jdbc.usuario = root
jdbc.password = mysql_123

View File

@ -3,4 +3,13 @@
<groupId>aadd_act2_3</groupId> <groupId>aadd_act2_3</groupId>
<artifactId>aadd_act2_3</artifactId> <artifactId>aadd_act2_3</artifactId>
<version>0.0.1-SNAPSHOT</version> <version>0.0.1-SNAPSHOT</version>
<dependencies>
<!-- https://mvnrepository.com/artifact/com.mysql/mysql-connector-j -->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>9.5.0</version>
</dependency>
</dependencies>
</project> </project>

View File

@ -1,8 +1,14 @@
package es.palomafp.aadd.inm; package es.palomafp.aadd.inm;
import java.util.List;
import java.util.Scanner; import java.util.Scanner;
import es.palomafp.aadd.inm.gestor.GestorFicheroConfiguracion; import es.palomafp.aadd.inm.dao.IContinenteDAO;
import es.palomafp.aadd.inm.dao.IPaisDAO;
import es.palomafp.aadd.inm.dao.impl.ContinenteDaoJDBC;
import es.palomafp.aadd.inm.dao.impl.PaisDaoJDBC;
import es.palomafp.aadd.inm.vo.Continente;
import es.palomafp.aadd.inm.vo.Pais;
/** /**
* *
@ -15,8 +21,8 @@ import es.palomafp.aadd.inm.gestor.GestorFicheroConfiguracion;
public class GestorMapaMundi { public class GestorMapaMundi {
public static void main(String[] args) { public static void main(String[] args) {
String urlJDBC= GestorFicheroConfiguracion.getValorDeConfiguracion("jdbc.url"); GestorMapaMundi gestor = new GestorMapaMundi();
System.out.println(urlJDBC);
Scanner scanner = new Scanner(System.in); // Crear el scanner Scanner scanner = new Scanner(System.in); // Crear el scanner
System.out.println("Introduce una opción de procesamiento sobre Mapa Mundi."); System.out.println("Introduce una opción de procesamiento sobre Mapa Mundi.");
@ -28,19 +34,68 @@ public class GestorMapaMundi {
switch (opcion) { switch (opcion) {
case "1": case "1":
System.out.println("Opción 1: Consultar países del continente americao que empiezan por Sa"); System.out.println("Opción 1: Consultar países del continente americano que empiezan por Sa");
List<Pais> listaPaises =gestor.consultarPaisesAmericanosEmpiezanSa();
for(Pais pais : listaPaises) {
String infoPais = "%s (%d) pertenece al continente %s (%s)";
infoPais = String.format(infoPais, pais.getNombre(), pais.getIdentificador(),
pais.getContinente().getNombre(), pais.getContinente().getCodigo());
System.out.println(infoPais);
}
break; break;
case "2": case "2":
System.out.println("Opción 2: Añadir nuevo continente."); System.out.println("Opción 2: Añadir nuevo continente.");
Continente continente = new Continente();
continente.setCodigo("06");
continente.setNombre("Antártida");
gestor.anyadirContinente(continente);
break; break;
case "3": case "3":
System.out.println("Opción 3: Actualizar el país con código 107. capital -> Capital City."); System.out.println("Opción 3: Actualizar el país con código 107. capital -> Capital City.");
gestor.actualizarPaisCodigo107();
break; break;
case "4": case "4":
System.out.println("Opción 4: Eliminar el continente con código 02."); System.out.println("Opción 4: Eliminar el continente con código 02.");
gestor.eliminarContinente("02");
break; break;
} }
scanner.close(); scanner.close();
} }
public List<Pais> consultarPaisesAmericanosEmpiezanSa() {
List<Pais> listaPaises = null;
IPaisDAO paisDAO = new PaisDaoJDBC();
listaPaises = paisDAO.obtenerListaPaisesAmericanosEmpiezanSa();
return listaPaises;
}
public void eliminarContinente(String codigo) {
IContinenteDAO continenteDAO = new ContinenteDaoJDBC();
continenteDAO.eliminarContinentePorCodigo(codigo);
}
public Pais actualizarPaisCodigo107() {
Pais pais = null;
int identificadorPais = 107;
IPaisDAO paisDAO = new PaisDaoJDBC();
pais = paisDAO.obtenerPaisPorID(identificadorPais);
pais.setCapital("Capital City");
paisDAO.actualizarPais(pais);
pais = paisDAO.obtenerPaisPorID(identificadorPais);
return pais;
}
public void anyadirContinente(Continente continente) {
IContinenteDAO continenteDAO = new ContinenteDaoJDBC();
continenteDAO.anyadirContinente(continente);
System.out.println("Se ha creado el continente: " + continente);
}
} }

View File

@ -1,5 +1,7 @@
package es.palomafp.aadd.inm.dao; package es.palomafp.aadd.inm.dao;
import es.palomafp.aadd.inm.vo.Continente;
/** /**
* *
* IContinenteDAO: Interfaz que define las operaciones de acceso a datos para Continente. * IContinenteDAO: Interfaz que define las operaciones de acceso a datos para Continente.
@ -8,4 +10,6 @@ package es.palomafp.aadd.inm.dao;
* @date 31 oct 2025 * @date 31 oct 2025
*/ */
public interface IContinenteDAO { public interface IContinenteDAO {
void anyadirContinente(Continente continente);
void eliminarContinentePorCodigo(String codigo);
} }

View File

@ -12,5 +12,7 @@ import es.palomafp.aadd.inm.vo.Pais;
* @date 31 oct 2025 * @date 31 oct 2025
*/ */
public interface IPaisDAO { public interface IPaisDAO {
List<Pais> obtenerListaPaises(String codigoContinente); Pais obtenerPaisPorID(int identificador);
List<Pais> obtenerListaPaisesAmericanosEmpiezanSa();
void actualizarPais(Pais pais);
} }

View File

@ -1,6 +1,12 @@
package es.palomafp.aadd.inm.dao.impl; package es.palomafp.aadd.inm.dao.impl;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import es.palomafp.aadd.inm.dao.IContinenteDAO; import es.palomafp.aadd.inm.dao.IContinenteDAO;
import es.palomafp.aadd.inm.gestor.GestorConexionJDBC;
import es.palomafp.aadd.inm.vo.Continente;
/** /**
* *
@ -10,4 +16,44 @@ import es.palomafp.aadd.inm.dao.IContinenteDAO;
* @date 31 oct 2025 * @date 31 oct 2025
*/ */
public class ContinenteDaoJDBC implements IContinenteDAO { public class ContinenteDaoJDBC implements IContinenteDAO {
@Override
public void anyadirContinente(Continente continente) {
String sentenciaSQL = "INSERT INTO T_CONTINENTE (codigo, nombre_continente) VALUES ('%s', '%s')";
sentenciaSQL = String.format(sentenciaSQL, continente.getCodigo(), continente.getNombre());
// try con recursos "cerrables": Connection, Statement
try (Connection conexion = GestorConexionJDBC.obtenerConexionJDBC();
Statement stm = conexion.createStatement();) {
stm.executeUpdate(sentenciaSQL);
} catch (SQLException e) {
e.printStackTrace();
}
}
@Override
public void eliminarContinentePorCodigo(String codigo) {
String sentenciaBorradoPaisesSQL = "DELETE FROM T_PAIS WHERE cod_continente='%s'";
sentenciaBorradoPaisesSQL = String.format(sentenciaBorradoPaisesSQL, codigo);
String sentenciaBorradoContinenteSQL = "DELETE FROM T_CONTINENTE WHERE codigo='%s'";
sentenciaBorradoContinenteSQL = String.format(sentenciaBorradoContinenteSQL, codigo);
// try con recursos "cerrables": Connection, Statement
try (Connection conexion = GestorConexionJDBC.obtenerConexionJDBC();
Statement stm = conexion.createStatement();) {
// Se desactiva 'autocommit' para manejar la transacción manualmente
conexion.setAutoCommit(false);
stm.executeUpdate(sentenciaBorradoPaisesSQL);
stm.executeUpdate(sentenciaBorradoContinenteSQL);
// Confirmamos la transacción
conexion.commit();
} catch (SQLException e) {
e.printStackTrace();
}
}
} }

View File

@ -1,9 +1,15 @@
package es.palomafp.aadd.inm.dao.impl; 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 java.util.List;
import es.palomafp.aadd.inm.dao.IPaisDAO; import es.palomafp.aadd.inm.dao.IPaisDAO;
import es.palomafp.aadd.inm.gestor.GestorFicheroConfiguracion; import es.palomafp.aadd.inm.gestor.GestorConexionJDBC;
import es.palomafp.aadd.inm.vo.Continente;
import es.palomafp.aadd.inm.vo.Pais; import es.palomafp.aadd.inm.vo.Pais;
/** /**
@ -13,13 +19,88 @@ import es.palomafp.aadd.inm.vo.Pais;
* @author Isidoro Nevares Martín - IES Virgen de la Paloma * @author Isidoro Nevares Martín - IES Virgen de la Paloma
* @date 31 oct 2025 * @date 31 oct 2025
*/ */
public class PaisDaoJDBC implements IPaisDAO{ public class PaisDaoJDBC implements IPaisDAO {
@Override @Override
public List<Pais> obtenerListaPaises(String codigoContinente) { public List<Pais> obtenerListaPaisesAmericanosEmpiezanSa() {
// TODO Auto-generated method stub List<Pais> listaPaises = null;
String urlJDBC= GestorFicheroConfiguracion.getValorDeConfiguracion("jdbc.url"); String sentenciaSQL = """
System.out.println("urlJDBC: "+urlJDBC); SELECT *
return null; FROM T_PAIS p join T_CONTINENTE c
on cod_continente= codigo
WHERE codigo='02' AND p.nombre_pais LIKE 'Sa%'
""";
// try con recursos "cerrables": Connection, Statement, ResultSet
try (Connection conexion = GestorConexionJDBC.obtenerConexionJDBC();
Statement stm = conexion.createStatement();
ResultSet resultado = stm.executeQuery(sentenciaSQL);) {
listaPaises = new ArrayList<Pais>();
while (resultado.next()) {
// Completar los atributos de continente
Continente continente = new Continente();
continente.setCodigo(resultado.getString("codigo"));
continente.setNombre(resultado.getString("nombre_continente"));
Pais pais = new Pais();
pais.setIdentificador(resultado.getInt("identificador"));
pais.setNombre(resultado.getString("nombre_pais"));
pais.setCapital(resultado.getString("capital"));
pais.setContinente(continente);
listaPaises.add(pais);
}
} catch (SQLException e) {
e.printStackTrace();
}
return listaPaises;
} }
@Override
public void actualizarPais(Pais pais) {
String sentenciaSQL = "update T_PAIS set capital= '%s' WHERE identificador=%d";
sentenciaSQL = String.format(sentenciaSQL, pais.getCapital(), pais.getIdentificador());
// try con recursos "cerrables": Connection, Statement
try (Connection conexion = GestorConexionJDBC.obtenerConexionJDBC();
Statement stm = conexion.createStatement();) {
stm.executeUpdate(sentenciaSQL);
} catch (SQLException e) {
e.printStackTrace();
}
}
@Override
public Pais obtenerPaisPorID(int identificador) {
Pais pais = null;
String sentenciaSQL = """
SELECT *
FROM T_PAIS p join T_CONTINENTE c
on cod_continente= codigo
WHERE identificador=%d
""";
sentenciaSQL = String.format(sentenciaSQL, identificador);
// try con recursos "cerrables": Connection, Statement, ResultSet
try (Connection conexion = GestorConexionJDBC.obtenerConexionJDBC();
Statement stm = conexion.createStatement();
ResultSet resultado = stm.executeQuery(sentenciaSQL);) {
if (resultado.next()) {
// Completar los atributos de continente
Continente continente = new Continente();
continente.setCodigo(resultado.getString("codigo"));
continente.setNombre(resultado.getString("nombre_continente"));
pais = new Pais();
pais.setIdentificador(resultado.getInt("identificador"));
pais.setNombre(resultado.getString("nombre_pais"));
pais.setCapital(resultado.getString("capital"));
pais.setContinente(continente);
}
} catch (SQLException e) {
e.printStackTrace();
}
return pais;
}
} }

View File

@ -0,0 +1,39 @@
package es.palomafp.aadd.inm.gestor;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
/**
*
* GestorConexionJDBC: Clase que realiza ....
* @author Isidoro Nevares Martín - IES Virgen de la Paloma
* @date 6 nov 2025
*
*
*/
public class GestorConexionJDBC {
// Constructor privado para evitar instanciación
private GestorConexionJDBC() {
}
public static Connection obtenerConexionJDBC() {
Connection conexion = null;
String driverJDBC= GestorFicheroConfiguracion.getValorDeConfiguracion("jdbc.driver");
try {
Class.forName(driverJDBC);
String urlJDBC= GestorFicheroConfiguracion.getValorDeConfiguracion("jdbc.url");
String usuario= GestorFicheroConfiguracion.getValorDeConfiguracion("jdbc.usuario");
String password= GestorFicheroConfiguracion.getValorDeConfiguracion("jdbc.password");
conexion=DriverManager.getConnection(urlJDBC, usuario, password);
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
return conexion;
}
}

View File

@ -1,6 +1,5 @@
package es.palomafp.aadd.inm.gestor; package es.palomafp.aadd.inm.gestor;
import java.io.FileInputStream;
import java.util.Properties; import java.util.Properties;
/** /**
@ -22,10 +21,10 @@ public class GestorFicheroConfiguracion {
propiedades= new Properties(); propiedades= new Properties();
try { try {
// Fichero que está en el classpath // 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 // Fichero con ruta relativa al proyecto
propiedades.load(new FileInputStream(RUTA_FICHERO_CONFIGURACION)); // propiedades.load(new FileInputStream(RUTA_FICHERO_CONFIGURACION));
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }

View File

@ -1,5 +1,5 @@
# Parámetros de conexión a la base de datos MapaMundi en SGDB MySQL # Parámetros de conexión a la base de datos MapaMundi en SGDB MySQL
jdbc.driver = com.mysql.cj.jdbc.Driver jdbc.driver = com.mysql.cj.jdbc.Driver
jdbc.url = jdbc:mysql://192.168.1.35:3306/Mapamundi jdbc.url = jdbc:mysql://192.168.1.36:3306/Mapamundi
jdbc.usuario = root jdbc.usuario = root
jdbc.password = mysql_123 jdbc.password = mysql_123

View File

@ -1,4 +0,0 @@
Manifest-Version: 1.0
Build-Jdk-Spec: 25
Created-By: Maven Integration for Eclipse

View File

@ -1,7 +0,0 @@
#Generated by Maven Integration for Eclipse
#Mon Nov 03 10:44:08 CET 2025
artifactId=aadd_act2_3
groupId=aadd_act2_3
m2e.projectLocation=C\:\\Users\\ineva\\INM\\Personal\\Trabajo\\00-Educaci\u00F3n - CM\\10-Curso 2025-2026\\02-Acceso de datos -DAM2\\workspace\\aadd_act2_3
m2e.projectName=aadd_act2_3
version=0.0.1-SNAPSHOT

View File

@ -1,6 +0,0 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>aadd_act2_3</groupId>
<artifactId>aadd_act2_3</artifactId>
<version>0.0.1-SNAPSHOT</version>
</project>

View File

@ -1,5 +0,0 @@
# Parámetros de conexión a la base de datos MapaMundi en SGDB MySQL
jdbc.driver = com.mysql.cj.jdbc.Driver
jdbc.url = jdbc:mysql://192.168.1.35:3306/Mapamundi
jdbc.usuario = root
jdbc.password = mysql_123