Una vez creados los métodos de recuperar vamos a añadir los de modificación:
int addPrestamo(Prestamo prestamo) -> Nos añade un préstamo
int deletePrestamo(int id) -> Nos elimina el préstamo que tenga ese id
int updatePrestamo(Prestamo prestamo) -> Nos modifica el préstamo con los valores que le pasemos.
Probamos todos estos métodos en el Test
package com.prestamos.dao; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.ArrayList; import java.util.List; public class PrestamosDAO { // En esta variable almacenamos la conexión a la base de datos private Connection con; public PrestamosDAO() { try { // Esta línea registra el driver Class.forName("com.mysql.cj.jdbc.Driver"); // Aquí creamos la conexión con: // driver: jdbc:mysql // url del servidor: localhost // Puerto del servidor: 3306 // Base de datos: prestamos // Usuario: root // Contraseña: "" con = DriverManager.getConnection("jdbc:mysql://localhost:3306/prestamos", "root", ""); } catch (Exception ex) { System.out.println(ex); } } /** * Paso al método el id del préstamo que quiero obtener Me devuelve un POJO que * almacena los datos del registro de la base de datos * * @param id del registro de la base de datos * @return Prestamos (pojo con los datos) */ public Prestamos getPrestamo(int id) { try { // Ir a la base de datos, recuperar el registro que tenga el id // Meterlo dentro de un POJO y devolverlo // Me creo la sentencia sql que recupera un préstamo con un id // Y le pongo un parámetro que será el id. Se representa con un ? String sql = "select * from prestamos where idprestamos=?"; // Una vez tengo el sql me creo la sentencia preparada PreparedStatement stmt = con.prepareStatement(sql); // Poniendo en el primer parámetro el valor que me están pasando del id stmt.setInt(1, id); // Recuperamos los resultados dentro de un ResultSet ResultSet rs = stmt.executeQuery(); // El resultset NO COGE todos los registros del select y los tiene como en un // array // El resultset es como si fuera un puntero, una flecha que nos apunta al primer // Registro del select. Para recuperar hay que usar next if (rs.next()) { // Si hemos podido obtener un registro en rs tenemos todos los datos // del registro de la base de datos. ¿Cómo? con rs.get del tipo y nombre // de la columna. Ej. rs.getInt(1) o rs.getInt("idprestamos") // ¿Qué hago con estos datos? Empaquetarlos dentro de un POJO para poder // devolverlos Prestamos resultado = new Prestamos(rs.getInt("idprestamos"), rs.getString("nombre"), rs.getString("titulo"), rs.getDate("fecha")); return resultado; } else { return null; } } catch (Exception ex) { System.out.println(ex); return null; } } public List<Prestamos> getPrestamos() { try { String sql = "select * from prestamos"; PreparedStatement stmt = con.prepareStatement(sql); ResultSet rs = stmt.executeQuery(); // Para almacenar todos los registros tengo que crear un arraylist List<Prestamos> resultado = new ArrayList<Prestamos>(); // En esta ocasión no tengo un if porque son varios registros. // Tengo que hacer un bucle hasta que no haya registros o lo que es lo mismo // MIENTRAS tengamos registros vamos recorriendo while (rs.next()) { Prestamos elemento = new Prestamos(rs.getInt("idprestamos"), rs.getString("nombre"), rs.getString("titulo"), rs.getDate("fecha")); resultado.add(elemento); } return resultado; } catch (Exception ex) { System.out.println(ex); return null; } } public int addPrestamo(Prestamos prestamo) { try { // Igual que en los métodos anteriores tengo que poner el sql // De lo que quiero hacer. En este caso es un insert y... tengo tres parámetros String sql="insert into prestamos (nombre,titulo,fecha) values (?,?,?)"; PreparedStatement stmt = con.prepareStatement(sql); // Tengo que pasar los parámetros stmt.setString(1,prestamo.getNombre() ); stmt.setString(2, prestamo.getTitulo()); stmt.setDate(3, prestamo.getFecha()); // Utilizo executeUpdate porque modifico los datos, no obtengo resultados // Devuelvo lo que me devuelve el método que son el número de filas afectadas return stmt.executeUpdate(); } catch (Exception ex) { System.out.println(ex); return 0; } } public int deletePrestamo(int id) { try { // Igual que en los métodos anteriores tengo que poner el sql // De lo que quiero hacer. En este caso es un delete y... tengo un parámetro String sql="delete from prestamos where idprestamos=?"; PreparedStatement stmt = con.prepareStatement(sql); // Tengo que pasar los parámetros stmt.setInt(1, id); // Utilizo executeUpdate porque modifico los datos, no obtengo resultados // Devuelvo lo que me devuelve el método que son el número de filas afectadas return stmt.executeUpdate(); } catch (Exception ex) { System.out.println(ex); return 0; } } public int updatePrestamo(Prestamos prestamo) { try { // Igual que en los métodos anteriores tengo que poner el sql // De lo que quiero hacer. En este caso es un update y... tengo cuatro parámetros String sql="update prestamos set nombre=?,titulo=?,fecha=? where idprestamos=?"; PreparedStatement stmt = con.prepareStatement(sql); // Tengo que pasar los parámetros stmt.setString(1,prestamo.getNombre() ); stmt.setString(2, prestamo.getTitulo()); stmt.setDate(3, prestamo.getFecha()); stmt.setInt(4, prestamo.getIdprestamos()); // Utilizo executeUpdate porque modifico los datos, no obtengo resultados // Devuelvo lo que me devuelve el método que son el número de filas afectadas return stmt.executeUpdate(); } catch (Exception ex) { System.out.println(ex); return 0; } } }
package com.prestamos.dao; import java.sql.Date; import java.util.List; public class TestDAO { public static void main(String[] args) { //Creo un POJO con el constructor a ver si va bien Prestamos pepe=new Prestamos(1,"hola","adios",Date.valueOf("2021-01-01")); // Probamos el objeto DAO. No hace nada, pero si hay error saltará PrestamosDAO modelo=new PrestamosDAO(); modelo.addPrestamo(pepe); modelo.deletePrestamo(4); Prestamos modificar=new Prestamos(6,"hola","adios",Date.valueOf("2021-01-01")); modelo.updatePrestamo(modificar); } }