- Si quieres el código SQL de la tabla "inquilinos" has clic aquí
- Si quieres el código SQL de la tabla "pagos" has clic aquí
Además, le vamos a crear una vista a la tabla "pagos" (para saber como crear este código paso a paso has clic aquí):
CREATE VIEW pagos_view AS
SELECT
pagos.idpagos id,
inquilinos.dni dni,
CONCAT_WS(" ", inquilinos.nombres, inquilinos.paterno, inquilinos.materno) datos,
pagos.monto monto,
DATE(pagos.fecha) fecha,
TIME(pagos.fecha) hora
FROM pagos INNER JOIN inquilinos
ON pagos.inquilino = inquilinos.idinquilinos
Creando el DTO, DAO y su implementación
DTO
¿Cómo crear un DTO desde una tabla de una base de datos? Dale clicpackage dto;
import java.time.LocalDateTime;
public class Pagos {
private Integer idpagos;
private Integer inquilino;
private Double monto;
private LocalDateTime fecha;
public Pagos() {
}
public Integer getIdpagos() {
return idpagos;
}
public void setIdpagos(Integer idpagos) {
this.idpagos = idpagos;
}
public Integer getInquilino() {
return inquilino;
}
public void setInquilino(Integer inquilino) {
this.inquilino = inquilino;
}
public Double getMonto() {
return monto;
}
public void setMonto(Double monto) {
this.monto = monto;
}
public LocalDateTime getFecha() {
return fecha;
}
public void setFecha(LocalDateTime fecha) {
this.fecha = fecha;
}
}
DAO
¿Cómo crear un DAO para una tabla de una base de datos? Dale clicpackage dao;
import java.util.List;
public interface DaoPagos {
public List<Object[]> pagosSel();
public String getMessage();
}
Implementación
¿Cómo crear la implementación de un DAO? Dale clicpackage dao.impl;
import biblioteca.ConectaBD;
import dao.DaoPagos;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
public class DaoPagosImpl implements DaoPagos {
private final ConectaBD conectaDb;
private String mensaje;
public DaoPagosImpl() {
this.conectaDb = new ConectaBD();
}
@Override
public List<Object[]> pagosSel() {
List<Object[]> list = null;
StringBuilder sql = new StringBuilder();
sql.append("SELECT ")
.append("id,")
.append("dni,")
.append("datos,")
.append("monto,")
.append("fecha,")
.append("hora")
.append(" FROM pagos_view");
try (Connection cn = conectaDb.conexionDB()) {
PreparedStatement ps = cn.prepareStatement(sql.toString());
ResultSet rs = ps.executeQuery();
list = new ArrayList<>();
while (rs.next()) {
Object[] pago = new Object[6];
pago[0] = rs.getInt(1);
pago[1] = rs.getString(2);
pago[2] = rs.getString(3);
pago[3] = rs.getDouble(4);
pago[4] = rs.getString(5);
pago[5] = rs.getString(6);
list.add(pago);
}
} catch (SQLException e) {
mensaje = e.getMessage();
}
return list;
}
@Override
public String getMessage() {
return mensaje;
}
}
Se puede apreciar que la función "pagosSel" devuelve un "List" pero no de "Pagos" sino tipo "Object[]", esto porque la vista no devuelve los mismo elementos ni tipos que hace la tabla. Es muy importante recordar que a la vista solo se le hace consultas de tipo "SELECT", no debemos intentar actualizar o eliminar, pues nos dará error.
Servlet y Validator
¿Cómo crear un validator y Servlet para una tabla de una base de datos? Dale clicValidator
package web.validator;
import dao.DaoPagos;
import dao.impl.DaoPagosImpl;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
public class PagosValidator {
private final HttpServletRequest request;
private final DaoPagos daoPagos;
public PagosValidator(HttpServletRequest request) {
this.request = request;
this.daoPagos = new DaoPagosImpl();
}
public String pagosSel() {
String result = null;
List<Object[]> list = daoPagos.pagosSel();
if (list != null) {
request.setAttribute("list", list);
} else {
result = daoPagos.getMessage();
}
return result;
}
}
Servlet
package web.servlet;
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 web.validator.PagosValidator;
@WebServlet(name = "PagosServlet", urlPatterns = {"/Pagos"})
public class PagosServlet extends HttpServlet {
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
String accion = request.getParameter("accion");
accion = (accion == null) ? "" : accion;
String result;
String target = "pagosSel.jsp";
PagosValidator validator = new PagosValidator(request);
switch (accion) {
case "SEL":
result = validator.pagosSel();
break;
case "":
result = "Solicitud requerida";
break;
default:
result = "Solicitud no reconocida";
}
if (result != null) {
request.setAttribute("message", result);
}
RequestDispatcher dispatcher = request.getRequestDispatcher(target);
dispatcher.forward(request, response);
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
@Override
public String getServletInfo() {
return "Short description";
}
}
Los JSP con la vista
¿Cómo crear un JSP para una tabla de una base de datos? Dale clicEl JSP que realiza la llamada al Servlet: pagos.jsp
<%response.sendRedirect("Pagos?accion=SEL");%>
El JSP que recibe los datos del Servlet: pagosSel.jsp
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Reporte de pagos</title>
<script src="jq/jquery-3.3.1.min.js" type="text/javascript"></script>
<script src="js/pagos.js" type="text/javascript"></script>
</head>
<body>
<a href="index.html">Regresar</a><br/>
<c:if test="${message != null}">
<div>${message}</div>
</c:if>
<table border="1">
<thead>
<tr>
<th>ID</th>
<th>DNI</th>
<th>NOMBRES Y APELLIDOS</th>
<th>MONTO PAGADO</th>
<th>FECHA</th>
<th>HORA</th>
</tr>
</thead>
<tbody>
<c:forEach var="f" items="${list}">
<tr>
<td>${f[0]}</td>
<td>${f[1]}</td>
<td>${f[2]}</td>
<td>${f[3]}</td>
<td>${f[4]}</td>
<td>${f[5]}</td>
</tr>
</c:forEach>
</tbody>
</table>
</body>
</html>
El resultado sería:
ID | DNI | NOMBRES Y APELLIDOS | MONTO PAGADO | FECHA | HORA |
---|---|---|---|---|---|
1 | 31378082 | LUISA PAUCAR NARRO | 400.0 | 2019-10-21 | 21:34:35 |
2 | 43331042 | AUGUSTO SOTOMAYOR NARVAJO | 300.0 | 2019-10-18 | 18:30:00 |
No hay comentarios:
Publicar un comentario