From 50c986110716b1822aeabf55e6e9c2ebcc77505a Mon Sep 17 00:00:00 2001 From: h4ckx0r Date: Mon, 24 Feb 2025 22:37:18 +0100 Subject: [PATCH] =?UTF-8?q?Ejercicios=20cap=C3=ADtulo=208=20bloque=201?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bloque01/ficheroPropiedades.properties | 2 +- src/capitulo08/bloque01/Main.java | 76 +++++++++++++++++++ src/capitulo08/bloque01/PropiedadesBBDD.java | 44 +++++++++++ src/capitulo08/bloque01/mysql.properties | 6 ++ .../bloque01/operaciones/Delete.java | 12 +++ .../bloque01/operaciones/Insert.java | 12 +++ .../bloque01/operaciones/Select.java | 41 ++++++++++ .../bloque01/operaciones/Update.java | 23 ++++++ 8 files changed, 215 insertions(+), 1 deletion(-) create mode 100644 src/capitulo08/bloque01/Main.java create mode 100644 src/capitulo08/bloque01/PropiedadesBBDD.java create mode 100644 src/capitulo08/bloque01/mysql.properties create mode 100644 src/capitulo08/bloque01/operaciones/Delete.java create mode 100644 src/capitulo08/bloque01/operaciones/Insert.java create mode 100644 src/capitulo08/bloque01/operaciones/Select.java create mode 100644 src/capitulo08/bloque01/operaciones/Update.java diff --git a/src/capitulo07/bloque01/ficheroPropiedades.properties b/src/capitulo07/bloque01/ficheroPropiedades.properties index 6ee02a6..23cb1d6 100644 --- a/src/capitulo07/bloque01/ficheroPropiedades.properties +++ b/src/capitulo07/bloque01/ficheroPropiedades.properties @@ -1,6 +1,6 @@ # Datos del usuario en uso NOMBRE=Natanael -APELLIDOS=Gómez Ortiz +APELLIDOS=Gómez Ortiz EDAD=18 ALTURA=160.6 SOLTERO=true \ No newline at end of file diff --git a/src/capitulo08/bloque01/Main.java b/src/capitulo08/bloque01/Main.java new file mode 100644 index 0000000..3f13bfd --- /dev/null +++ b/src/capitulo08/bloque01/Main.java @@ -0,0 +1,76 @@ +package capitulo08.bloque01; + +import capitulo08.bloque01.operaciones.Delete; +import capitulo08.bloque01.operaciones.Insert; +import capitulo08.bloque01.operaciones.Select; +import capitulo08.bloque01.operaciones.Update; + +import java.sql.*; + +import static capitulo04.utils.Utils.solicitarIntScannerInline; +import static capitulo04.utils.Utils.solicitarStringScannerInline; + +public class Main { + public static void main(String[] args) { + int opcion = 0; + Connection conn = null; + try { + conn = getConexion(); + } catch (SQLException | ClassNotFoundException e) { + throw new RuntimeException(e); + } + + do { + System.out.println( + "Seleccione una operación:\n" + + "0 - Salir del programa\n" + + "1 - Mostrar todos los fabricantes\n" + + "2 - Añadir un fabricante\n" + + "3 - Actualizar un fabricante\n" + + "4 - Eliminar un fabricante"); + opcion = solicitarIntScannerInline("> "); + + try { + switch (opcion) { + case 1: { + Select.mostrarTabla(conn, "fabricante"); + break; + } + case 2: { + Insert.addFabricante(conn, + solicitarStringScannerInline("Introduzca el CIF: "), + solicitarStringScannerInline("Introduzca el Nombre: ")); + break; + } + case 3: { + int id; + do { + id = solicitarIntScannerInline("Introduzca el ID del fabricante: "); + } while (!Select.isIdValid(conn, "fabricante", id)); + String cifNuevo = solicitarStringScannerInline("Introduzca el nuevo CIF (en blanco para no cambiar): "); + String nombreNuevo = solicitarStringScannerInline("Introduzca el nuevo Nombre (en blanco para no cambiar): "); + Update.actualizarFabricante(conn, id, cifNuevo, nombreNuevo); + break; + } + case 4: { + int id; + do { + id = solicitarIntScannerInline("Introduzca el ID del fabricante: "); + } while (!Select.isIdValid(conn, "fabricante", id)); + Delete.eliminarRegistro(conn, "fabricante", id); + break; + } + } + } catch (SQLException e) { + throw new RuntimeException(e); + } + + } while (opcion != 0); + } + + private static Connection getConexion() throws ClassNotFoundException, SQLException { + Class.forName(PropiedadesBBDD.getMySQLDriver()); + return DriverManager.getConnection(PropiedadesBBDD.getMySQLConnectionString()); + } + +} diff --git a/src/capitulo08/bloque01/PropiedadesBBDD.java b/src/capitulo08/bloque01/PropiedadesBBDD.java new file mode 100644 index 0000000..4036e56 --- /dev/null +++ b/src/capitulo08/bloque01/PropiedadesBBDD.java @@ -0,0 +1,44 @@ +package capitulo08.bloque01; + +import java.io.File; +import java.io.FileReader; +import java.io.IOException; +import java.util.Properties; + +public class PropiedadesBBDD { + + private static Properties propiedades; + + private static Properties getPropiedades() { + if (propiedades == null) { + propiedades = new Properties(); + + try { + File file = new File("./out/production/Ejercicios/capitulo08/otros/mysql.properties"); + propiedades.load(new FileReader(file)); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + return propiedades; + } + + public static String getMySQLConnectionString() { + String host = getProperty("MYSQL_HOST"); + String schema = getProperty("MYSQL_SCHEMA_NAME"); + String properties = getProperty("MYSQL_PROPERTIES"); + String user = getProperty("MYSQL_USER"); + String password = getProperty("MYSQL_PASSWORD"); + + return "jdbc:mysql://" + user + ":" + password + "@" + host + "/" + schema + properties; + } + + public static String getMySQLDriver() { + return getProperty("MYSQL_DRIVER_CLASS"); + } + + public static String getProperty(String nombrePropiedad) { + return getPropiedades().getProperty(nombrePropiedad); + } + +} diff --git a/src/capitulo08/bloque01/mysql.properties b/src/capitulo08/bloque01/mysql.properties new file mode 100644 index 0000000..34a1e84 --- /dev/null +++ b/src/capitulo08/bloque01/mysql.properties @@ -0,0 +1,6 @@ +MYSQL_DRIVER_CLASS=com.mysql.cj.jdbc.Driver +MYSQL_USER=root +MYSQL_PASSWORD=1234 +MYSQL_HOST=127.0.0.1:3310 +MYSQL_SCHEMA_NAME=tutorialjavacoches +MYSQL_PROPERTIES=?autoReconnect=true&serverTimezone=Europe/Madrid&useSSL=False&allowPublicKeyRetrieval=TRUE diff --git a/src/capitulo08/bloque01/operaciones/Delete.java b/src/capitulo08/bloque01/operaciones/Delete.java new file mode 100644 index 0000000..edd7f52 --- /dev/null +++ b/src/capitulo08/bloque01/operaciones/Delete.java @@ -0,0 +1,12 @@ +package capitulo08.bloque01.operaciones; + +import java.sql.Connection; +import java.sql.SQLException; +import java.sql.Statement; + +public class Delete { + public static int eliminarRegistro(Connection conn, String tabla, int id) throws SQLException { + Statement st = conn.createStatement(); + return st.executeUpdate("delete from tutorialjavacoches." + tabla + " where id=" + id + ";"); + } +} diff --git a/src/capitulo08/bloque01/operaciones/Insert.java b/src/capitulo08/bloque01/operaciones/Insert.java new file mode 100644 index 0000000..48287e6 --- /dev/null +++ b/src/capitulo08/bloque01/operaciones/Insert.java @@ -0,0 +1,12 @@ +package capitulo08.bloque01.operaciones; + +import java.sql.Connection; +import java.sql.SQLException; +import java.sql.Statement; + +public class Insert { + public static int addFabricante(Connection conn, String cif, String nombre) throws SQLException { + Statement st = conn.createStatement(); + return st.executeUpdate("insert into tutorialjavacoches.fabricante (id, cif, nombre) values (" + Select.getNextId(conn, "fabricante") + ",'" + cif + "','" + nombre + "');"); + } +} diff --git a/src/capitulo08/bloque01/operaciones/Select.java b/src/capitulo08/bloque01/operaciones/Select.java new file mode 100644 index 0000000..50a16fd --- /dev/null +++ b/src/capitulo08/bloque01/operaciones/Select.java @@ -0,0 +1,41 @@ +package capitulo08.bloque01.operaciones; + +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; + +public class Select { + public static void mostrarTabla(Connection conn, String tabla) throws SQLException { + Statement st = conn.createStatement(); + ResultSet rs = st.executeQuery("select * from tutorialjavacoches." + tabla + ";"); + + switch (tabla) { + case "fabricante": { + System.out.println("ID\t | CIF\t\t\t | Nombre"); + while (rs.next()) { + System.out.println(rs.getInt(1) + "\t | " + rs.getString(2) + "\t | " + rs.getString(3)); + } + } + } + } + + public static int getNextId(Connection conn, String tabla) throws SQLException { + Statement st = conn.createStatement(); + ResultSet rs = st.executeQuery("select max(id) from tutorialjavacoches." + tabla + ";"); + rs.next(); + return (rs.getInt(1) + 1); + } + + public static boolean isIdValid(Connection conn, String tabla, int id) throws SQLException { + Statement st = conn.createStatement(); + ResultSet rs = st.executeQuery("select id from tutorialjavacoches." + tabla + " where id=" + id + ";"); + if (rs.next()) { + return rs.getInt(1) == id; + } else { + return false; + } + } + + +} diff --git a/src/capitulo08/bloque01/operaciones/Update.java b/src/capitulo08/bloque01/operaciones/Update.java new file mode 100644 index 0000000..563435d --- /dev/null +++ b/src/capitulo08/bloque01/operaciones/Update.java @@ -0,0 +1,23 @@ +package capitulo08.bloque01.operaciones; + +import java.sql.Connection; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.Objects; + +public class Update { + public static void actualizarFabricante(Connection conn, int id, String cif, String nombre) throws SQLException { + if (!(Objects.equals(cif, "") || cif == null)) { + actualizarCampo(conn, "fabricante", id, "cif", cif); + } + if (!(Objects.equals(nombre, "") || nombre == null)) { + actualizarCampo(conn, "fabricante", id, "nombre", nombre); + } + + } + + private static int actualizarCampo(Connection conn, String tabla, int id, String campo, String nuevoValor) throws SQLException { + Statement st = conn.createStatement(); + return st.executeUpdate("update tutorialjavacoches." + tabla + " set " + campo + "='" + nuevoValor + "' where id=" + id + ";"); + } +}