https://www.arquitecturajava.com/que-es-un-java-bean/
https://www.arquitecturajava.com/el-patron-repository-y-la-explosion-de-metodos/
https://www.genbeta.com/desarrollo/que-es-maven
https://www.javiergarzas.com/2014/06/maven-en-10-min.html
https://geekflare.com/es/apache-maven-for-beginners/
En otros lenguajes (php, node) se usa composer:
https://academy.leewayweb.com/que-es-composer/
En eclipse:
https://jarroba.com/maven-en-eclipse/
http://www.programandoapasitos.com/2017/07/tutorial-maven-en-eclipse.html
Un ejemplo de como crear un proyecto de web dinámico en Eclipse con Maven:
https://crunchify.com/how-to-create-dynamic-web-project-using-maven-in-eclipse/
Repositorio de dependencias:
El POM:
https://maven.apache.org/guides/introduction/introduction-to-the-pom.html
Tenemos la siguiente base de datos:
DROP TABLE IF EXISTS `cartera`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `cartera` ( `idcartera` int(11) NOT NULL AUTO_INCREMENT, `idusuario` int(11) DEFAULT NULL, `idmoneda` int(11) DEFAULT NULL, `cantidad` int(11) DEFAULT NULL, PRIMARY KEY (`idcartera`) ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1; /*!40101 SET character_set_client = @saved_cs_client */; -- -- Dumping data for table `cartera` -- LOCK TABLES `cartera` WRITE; /*!40000 ALTER TABLE `cartera` DISABLE KEYS */; INSERT INTO `cartera` VALUES (1,1,1,2),(2,1,2,3),(3,2,1,1),(4,2,2,5); /*!40000 ALTER TABLE `cartera` ENABLE KEYS */; UNLOCK TABLES; -- -- Table structure for table `monedas` -- DROP TABLE IF EXISTS `monedas`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `monedas` ( `idmonedas` int(11) NOT NULL AUTO_INCREMENT, `nombre` varchar(45) DEFAULT NULL, `valor` decimal(8,2) DEFAULT NULL, PRIMARY KEY (`idmonedas`) ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1; /*!40101 SET character_set_client = @saved_cs_client */; -- -- Dumping data for table `monedas` -- LOCK TABLES `monedas` WRITE; /*!40000 ALTER TABLE `monedas` DISABLE KEYS */; INSERT INTO `monedas` VALUES (1,'Bitcoin',10.00),(2,'Ethereum',20.00); /*!40000 ALTER TABLE `monedas` ENABLE KEYS */; UNLOCK TABLES; -- -- Table structure for table `usuario` -- DROP TABLE IF EXISTS `usuario`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `usuario` ( `idusuario` int(11) NOT NULL, `nombre` varchar(45) DEFAULT NULL, PRIMARY KEY (`idusuario`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; /*!40101 SET character_set_client = @saved_cs_client */; -- -- Dumping data for table `usuario` -- LOCK TABLES `usuario` WRITE; /*!40000 ALTER TABLE `usuario` DISABLE KEYS */; INSERT INTO `usuario` VALUES (1,'Ana'),(2,'Eva'); /*!40000 ALTER TABLE `usuario` ENABLE KEYS */;
Y vamos a crear los POJO’s y los DAO para manejar estas relaciones.
Usuarios:
package com.trifulcas.datos; import java.util.ArrayList; import java.util.List; public class Usuario { private int idusuario; private String nombre; private List<Cartera> cartera; public Usuario(int idusuario, String nombre) { super(); this.idusuario = idusuario; this.nombre = nombre; cartera=new ArrayList<Cartera>(); } /** * @return the cartera */ public List<Cartera> getCartera() { return cartera; } /** * @param cartera the cartera to set */ public void setCartera(List<Cartera> cartera) { this.cartera = cartera; } /** * @return the idusuario */ public int getIdusuario() { return idusuario; } /** * @param idusuario the idusuario to set */ public void setIdusuario(int idusuario) { this.idusuario = idusuario; } /** * @return the nombre */ public String getNombre() { return nombre; } /** * @param nombre the nombre to set */ public void setNombre(String nombre) { this.nombre = nombre; } @Override public String toString() { return "Usuario [idusuario=" + idusuario + ", nombre=" + nombre + ", cartera=" + cartera + "]"; } }
package com.trifulcas.datos; 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 UsuarioDAO { private Connection con; private int max_records = 1000; public UsuarioDAO() { try { Class.forName("com.mysql.cj.jdbc.Driver"); con = DriverManager.getConnection("jdbc:mysql://localhost:3306/prestamos", "root", ""); } catch (Exception ex) { System.out.println(ex); } } public Usuario getUsuario(int id) { Usuario res = null; CarteraDAO cartera=new CarteraDAO(); try { String sql = "select * from usuario where idusuario=?"; PreparedStatement stmt = con.prepareStatement(sql); stmt.setInt(1, id); ResultSet rs = stmt.executeQuery(); if (rs.next()) { res = new Usuario(rs.getInt("idusuario"),rs.getString("nombre")); res.setCartera(cartera.getCarteraUsuario(rs.getInt("idusuario"))); } } catch (Exception ex) { System.out.println(ex); } return res; } }
MOneda:
package com.trifulcas.datos; public class Moneda { private int idmonedas; private String nombre; private double valor; public Moneda(int idmonedas, String nombre, double valor) { super(); this.idmonedas = idmonedas; this.nombre = nombre; this.valor = valor; } /** * @return the idmonedas */ public int getIdmonedas() { return idmonedas; } /** * @param idmonedas the idmonedas to set */ public void setIdmonedas(int idmonedas) { this.idmonedas = idmonedas; } /** * @return the nombre */ public String getNombre() { return nombre; } /** * @param nombre the nombre to set */ public void setNombre(String nombre) { this.nombre = nombre; } /** * @return the valor */ public double getValor() { return valor; } /** * @param valor the valor to set */ public void setValor(double valor) { this.valor = valor; } @Override public String toString() { return "Moneda [idmonedas=" + idmonedas + ", nombre=" + nombre + ", valor=" + valor + "]"; } }
package com.trifulcas.datos; 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 MonedaDAO { private Connection con; private int max_records = 1000; public MonedaDAO() { try { Class.forName("com.mysql.cj.jdbc.Driver"); con = DriverManager.getConnection("jdbc:mysql://localhost:3306/prestamos", "root", ""); } catch (Exception ex) { System.out.println(ex); } } public Moneda getMoneda(int id) { Moneda res = null; try { String sql = "select * from monedas where idmonedas=?"; PreparedStatement stmt = con.prepareStatement(sql); stmt.setInt(1, id); ResultSet rs = stmt.executeQuery(); if (rs.next()) { res = new Moneda(rs.getInt("idmonedas"), rs.getString("nombre"), rs.getDouble("valor")); } } catch (Exception ex) { System.out.println(ex); } return res; } }
Cartera:
package com.trifulcas.datos; public class Cartera { private int idcartera; private int idusuario; private int idmoneda; private int cantidad; private Moneda moneda; public Cartera(int idcartera, int idusuario, int idmoneda, int cantidad, Moneda moneda) { super(); this.idcartera = idcartera; this.idusuario = idusuario; this.idmoneda = idmoneda; this.cantidad=cantidad; this.moneda = moneda; } /** * @return the cantidad */ public int getCantidad() { return cantidad; } /** * @param cantidad the cantidad to set */ public void setCantidad(int cantidad) { this.cantidad = cantidad; } /** * @return the idcartera */ public int getIdcartera() { return idcartera; } /** * @param idcartera the idcartera to set */ public void setIdcartera(int idcartera) { this.idcartera = idcartera; } /** * @return the idusuario */ public int getIdusuario() { return idusuario; } /** * @param idusuario the idusuario to set */ public void setIdusuario(int idusuario) { this.idusuario = idusuario; } /** * @return the idmoneda */ public int getIdmoneda() { return idmoneda; } /** * @param idmoneda the idmoneda to set */ public void setIdmoneda(int idmoneda) { this.idmoneda = idmoneda; } /** * @return the moneda */ public Moneda getMoneda() { return moneda; } /** * @param moneda the moneda to set */ public void setMoneda(Moneda moneda) { this.moneda = moneda; } @Override public String toString() { return "Cartera [idcartera=" + idcartera + ", idusuario=" + idusuario + ", idmoneda=" + idmoneda + ", cantidad=" + cantidad + ", moneda=" + moneda + "]"; } }
package com.trifulcas.datos; 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 CarteraDAO { private Connection con; private int max_records = 1000; public CarteraDAO() { try { Class.forName("com.mysql.cj.jdbc.Driver"); con = DriverManager.getConnection("jdbc:mysql://localhost:3306/prestamos", "root", ""); } catch (Exception ex) { System.out.println(ex); } } public Cartera getCartera(int id) { Cartera res = null; MonedaDAO moneda=new MonedaDAO(); try { String sql = "select * from cartera where idcartera=?"; PreparedStatement stmt = con.prepareStatement(sql); stmt.setInt(1, id); ResultSet rs = stmt.executeQuery(); if (rs.next()) { res = new Cartera(rs.getInt("idcartera"), rs.getInt("idusuario"),rs.getInt("idmoneda"), rs.getInt("cantidad"), moneda.getMoneda(rs.getInt("idmoneda"))) ; } } catch (Exception ex) { System.out.println(ex); } return res; } public List<Cartera> getCarteraUsuario(int id){ List<Cartera> res = new ArrayList<Cartera>(); try { String sql = "select * from cartera where idusuario=?"; PreparedStatement stmt = con.prepareStatement(sql); stmt.setInt(1, id); ResultSet rs = stmt.executeQuery(); while (rs.next()) { Cartera temp = getCartera(rs.getInt("idcartera")); res.add(temp); } } catch (Exception ex) { System.out.println(ex); } return res; } }
Test:
package com.trifulcas.datos; public class TestCartera { public static void main(String[] args) { MonedaDAO moneda=new MonedaDAO(); System.out.println(moneda.getMoneda(1)); CarteraDAO cartera = new CarteraDAO(); System.out.println(cartera.getCartera(1)); System.out.println(cartera.getCartera(2)); System.out.println(cartera.getCartera(3)); System.out.println(cartera.getCarteraUsuario(1)); UsuarioDAO usuario=new UsuarioDAO(); System.out.println(usuario.getUsuario(1)); System.out.println(usuario.getUsuario(2)); } }
INTRODUCCIÓN
Motivación
Planteamiento técnico
ESPECIFICACIÓN DE REQUISITOS
Propósito
Descripción general
Funciones del producto
Requisitos especificos
Requisitos funcionales
Requisitos de interfaz
Vamos a implementar las dos cosas que nos faltan: editar y eliminar.
Primero añadimos en la lista de préstamos un enlace a editar y otro a eliminar. La acción en el primero será ‘editar’ y en el segundo eliminar. En los dos casos tenemos que pasar el ‘id’ como parámetro.
Editar tiene un circuito muy parecido a nuevo:
1) Obtenemos los datos y mostramos un formulario con esos datos
2) Enviamos los datos y actualizamos el registro.
Eliminar simplemente captura el id que le pasamos y nos elimina el registro correspondiente.
Código completo:
https://github.com/juanpablofuentes/JavaNetmind/tree/main/prestamos
Una vez nos funcione la lista de préstamos vamos a añadir el botón de nuevo préstamo.
Este es un circuito en dos partes:
1) MOstramos una página para introducir los datos del préstamo
2) Recuperamos los datos y los introducimos en la base de datos.
Todo lo vamos hacer desde el mismo servlet a través de un parámetro accion como en el ejemplo de Categorias.
Si nos pasan la accion ‘nuevo’ mostramos la página para introducir los datos
Si nos pasan la acción insertar recuperamos los parámetros, creamos un objeto préstamo, lo añadimos a la base de datos y redirigimos a la lista.
package com.prestamos.controller; import java.io.IOException; import java.sql.Date; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.prestamos.dao.Prestamos; import com.prestamos.dao.PrestamosDAO; /** * Servlet implementation class PrestamosController */ @WebServlet("/prestamos") public class PrestamosController extends HttpServlet { private static final long serialVersionUID = 1L; private PrestamosDAO modelo; /** * @see HttpServlet#HttpServlet() */ public PrestamosController() { super(); modelo = new PrestamosDAO(); } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse * response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String accion = request.getParameter("accion"); System.out.println(accion); if (accion==null) { accion=""; } if (accion.equals("nuevo")) { // Pondré el código para mostrar la página para introducir los nuevos datos RequestDispatcher dispatcher = request.getRequestDispatcher("nuevo.jsp"); dispatcher.forward(request, response); } else if (accion.equals("insertar")) { // Aquí recuperaré los datos y los añadiré a la base de datos System.out.println("Hola, preparado para insertar"); // Recupero los datos que me pasan String nombre=request.getParameter("nombre"); String titulo=request.getParameter("titulo"); Date fecha=Date.valueOf(request.getParameter("fecha")); // Tengo que darlos de alta en la base de datos ¿Cómo? // Con el modelo Prestamos nuevo=new Prestamos(0,nombre,titulo,fecha); modelo.addPrestamo(nuevo); request.setAttribute("prestamos", modelo.getPrestamos()); RequestDispatcher dispatcher = request.getRequestDispatcher("prestamos.jsp"); dispatcher.forward(request, response); } else if (accion.equals("borrar")) { // Recupero el id y elimino el registro System.out.println("Aquí hay que borrar"); int id=Integer.parseInt(request.getParameter("id")); System.out.println(id); } else if (accion.equals("editar")) { // Recuperaré el registro que tenga el id que me pasan y // Mandaré los datos a una página para que el usuario los modifique System.out.println("recuperar los datos (id) y formulario editar"); } else if (accion.equals("modificar")) { // Recupero los datos que me pasan y modifico el registro en la base de datos System.out.println("recuperar los datos (id,nombre,titulo,fecha) y modificar en la base de datos"); } else { request.setAttribute("prestamos", modelo.getPrestamos()); RequestDispatcher dispatcher = request.getRequestDispatcher("prestamos.jsp"); dispatcher.forward(request, response); } } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse * response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); } }
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Mantenimiento prestamos</title> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css"> <!-- jQuery library --> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script> <!-- Popper JS --> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.0/umd/popper.min.js"></script> <!-- Latest compiled JavaScript --> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script> <link rel="stylesheet" type="text/css" href="style.css"> </head> <body> <div class="container"> <h1>Lista de préstamos</h1> <a href="./prestamos?accion=nuevo" class="btn btn-primary">Nuevo préstamo</a> <table class="table table-bordered"> <thead> <tr> <th>ID</th> <th>Nombre</th> <th>Titulo</th> <th>Fecha</th> <th>Acciones</th> </tr> </thead> <tbody> <c:forEach var="prestamo" items="${prestamos}"> <tr> <td><c:out value="${prestamo.idprestamos}" /></td> <td><c:out value="${prestamo.nombre}" /></td> <td><c:out value="${prestamo.titulo}" /></td> <td><c:out value="${prestamo.fecha}" /></td> <td><a href="./prestamos?accion=editar&id=${prestamo.idprestamos}">Editar</a> | <a href="./prestamos?accion=borrar&id=${prestamo.idprestamos}">Borrar</a> </td> </tr> </c:forEach> </tbody> </table> </div> </body> </html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Mantenimiento prestamos</title> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css"> <!-- jQuery library --> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script> <!-- Popper JS --> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.0/umd/popper.min.js"></script> <!-- Latest compiled JavaScript --> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script> <link rel="stylesheet" type="text/css" href="style.css"> </head> <body> <div class="container"> <h1>Nuevo préstamo</h1> <form action="./prestamos?accion=insertar" method="post"> <div class="form-group"> <label for="nombre">Nombre:</label> <input type="text" class="form-control" placeholder="Nombre" name="nombre"> </div> <div class="form-group"> <label for="titulo">Título:</label> <input type="text" class="form-control" placeholder="Titulo" name="titulo"> </div> <div class="form-group"> <label for="fecha">Fecha:</label> <input type="text" class="form-control" placeholder="Fecha" name="fecha"> </div> <input type="submit"/> </form> </div> </body> </html>
Vamos a crear un servlet que nos capture la url ‘/prestamos’.
En el doget vamos a redirigir a la página ‘prestamos.jsp’.
En nuestro index.jsp vamos a poner un enlace a /prestamos.
Si funciona, modificamos el doget del servlet para que recupere todos los prestamos y los envíe a prestamos.jsp
Y modificamos la página prestamos.jsp para que nos mueste el id, nombre, titulo y fecha de los préstamos que nos pasan.
package com.prestamos.controller; import java.io.IOException; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.prestamos.dao.PrestamosDAO; /** * Servlet implementation class PrestamosController */ @WebServlet("/prestamos") public class PrestamosController extends HttpServlet { private static final long serialVersionUID = 1L; private PrestamosDAO modelo; /** * @see HttpServlet#HttpServlet() */ public PrestamosController() { super(); modelo=new PrestamosDAO(); } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setAttribute("prestamos", modelo.getPrestamos()); RequestDispatcher dispatcher = request.getRequestDispatcher("prestamos.jsp"); dispatcher.forward(request, response); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); } }
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Mantenimiento prestamos</title> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css"> <!-- jQuery library --> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script> <!-- Popper JS --> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.0/umd/popper.min.js"></script> <!-- Latest compiled JavaScript --> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script> <link rel="stylesheet" type="text/css" href="style.css"> </head> <body> <div class="container"> <h1>Lista de préstamos</h1> <table class="table table-bordered"> <thead> <tr> <th>ID</th> <th>Nombre</th> <th>Titulo</th> <th>Fecha</th> <th>Acciones</th> </tr> </thead> <tbody> <c:forEach var="prestamo" items="${prestamos}"> <tr> <td><c:out value="${prestamo.idprestamos}" /></td> <td><c:out value="${prestamo.nombre}" /></td> <td><c:out value="${prestamo.titulo}" /></td> <td><c:out value="${prestamo.fecha}" /></td> <td>Aquí irán las acciones</td> </tr> </c:forEach> </tbody> </table> </div> </body> </html>
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); } }