Consultado registros de una BD usando JSP y Servlets
Consultado registros de una BD usando JSP y Servlets
Continuando con lo visto en la entrada anterior, hoy veremos como podemos mostrar los resultados devueltos por la base de datos en nuestro JSP.
Para esto el usuario ingresara el nombre de usuario a buscar, y aparecera toda la informacion en la BD de ese usuario.


Codigo
Clase BeanUsuario
public class BeanUsuario {
private String nombre;
private String apellido;
private String edad;
private String correo;
private String usuario;
private String clave;
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public String getApellido() {
return apellido;
}
public void setApellido(String apellido) {
this.apellido = apellido;
}
public String getEdad() {
return edad;
}
public void setEdad(String edad) {
this.edad = edad;
}
public String getCorreo() {
return correo;
}
public void setCorreo(String correo) {
this.correo = correo;
}
public String getUsuario() {
return usuario;
}
public void setUsuario(String usuario) {
this.usuario = usuario;
}
public String getClave() {
return clave;
}
public void setClave(String clave) {
this.clave = clave;
}
public BeanUsuario(String nombre, String apellido, String edad,
String correo, String usuario, String clave) {
super();
this.nombre = nombre;
this.apellido = apellido;
this.edad = edad;
this.correo = correo;
this.usuario = usuario;
this.clave = clave;
}
}
Clase Usuario
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import controlador.BeanUsuario;
public class Usuario {
public static BeanUsuario consultarUsuario(String usuario){
BeanUsuario busuario=null;
try{
Conexion c=new Conexion();
Connection con=c.getConexion();
Statement st=con.createStatement();
ResultSet rs=st.executeQuery("Select * from Usuario where usuario='"+usuario+"'");
while(rs.next()){
busuario=new BeanUsuario(rs.getString(2), rs.getString(3), rs.getInt(4)+"", rs.getString(5), usuario, rs.getString(7));
}
rs.close();
st.close();
}catch(SQLException se){
se.printStackTrace();
}
return busuario;
}
}
Clase Conexion
import java.sql.*;
public class Conexion {
private Connection con = null;
public Conexion() {
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/javazoneee", "root","****");
} catch (InstantiationException | IllegalAccessException
| ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
}
public Connection getConexion(){
return con;
}
public void cerrarConexion(){
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
Clase ServletConsulta
import java.io.IOException;
import java.io.PrintWriter;
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 controlador.BeanUsuario;
import modelo.Usuario;
public class ServletConsulta extends HttpServlet {
private static final long serialVersionUID = 1L;
public ServletConsulta() {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String usuario=request.getParameter("usuario");
BeanUsuario busuario=Usuario.consultarUsuario(usuario);
if(busuario!=null){
request.setAttribute("busuario", busuario);
request.getRequestDispatcher("mostrar.jsp").forward(request, response);
}else{
PrintWriter out=response.getWriter();
out.println("Error, no se encontro el usuario.");
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
Archivo JSP index.jsp
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<div align="center">
<form action="ServletConsulta" method="get">
<table>
<tr>
<td colspan="2" align="center">Consultar Usuario</td>
</tr>
<tr>
<td>Usuario: </td>
<td><input type="text" size="15" name="usuario"></td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit" value="Consultar"></td>
</tr>
</table>
</form>
</div>
</body>
</html>
Archivo JSP mostrar.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Consulta Usuario</title>
</head>
<body>
<%BeanUsuario busuario=(BeanUsuario)request.getAttribute("busuario"); %>
<div align="center">
<table>
<tr>
<td>Nombre:</td>
<td><input type="text" size="20" name="nombre" value="<%= busuario.getNombre() %>"></td>
</tr>
<tr>
<td>Apellido:</td>
<td><input type="text" size="20" name="apellido" value="<%= busuario.getApellido() %>"></td>
</tr>
<tr>
<td>Edad:</td>
<td><input type="text" size="20" name="edad" value="<%= busuario.getEdad() %>"></td>
</tr>
<tr>
<td>Correo:</td>
<td><input type="text" size="20" name="correo" value="<%= busuario.getCorreo() %>"></td>
</tr>
<tr>
<td>Usuario:</td>
<td><input type="text" size="20" name="usuario" value="<%= busuario.getUsuario() %>"></td>
</tr>
<tr>
<td>Contraseña:</td>
<td><input type="text" size="20" name="clave" value="<%= busuario.getClave() %>"></td>
</tr>
</table>
</div>
</body>
</html>
Descargar
Podrán descargar el proyecto completo directamente desde aquí. Sigan visitándonos en Java Zone para mas informacion.
- roger1345's blog
- Inicie sesión o regístrese para enviar comentarios



Comentarios
Ojo con esas conexiones a BDD
Hola,
Quería advertirte, y a todos los lectores, que la forma que muestras de conectarse a la BDD y trabajar con ella es incorrecta y sería una fuente de problemas importantes a nada que se intententará usar más allá de una simple consulta de prueba.
Entre otros detalles: no se cierran las conexiones, no se cierran los statements, se usa una sola conexión compartida en un entorno multi-hilo, y además sin las protecciones de sincronización adecuadas...
Ese código es un peligro :)
Buena observacion!
Greeneyed, gracias por tu observacion, y claro que este es solo para ejemplos con un solo usuario consultando en la BD, este es solo un comienzo en JEE, iremos viendo mas adelante como podemos crear un pool de conexiones a la BD, como usar algun framework como hibernate, y asi iremos avanzando cada vez mas en el tema. Por supuesto aceptamos cualquier comentario o sugerencia, si tienes alguna idea que aportar, estaremos atentos todos a escuchar y mas si tienes experiencias que puedas compartir.
de acuerdo con greeneyed
Aunque sea sólo un simple ejemplo, no deja de ser un ejemplo de una aplicación web, que por naturaleza es multiusuario, y por lo tanto debe contemplar la concurrencia en todo momento. Es mejor que desde el inicio se incluya lo necesario para cerrar conexiones, no compartir conexiones, etc; de lo contrario, son ejemplos erróneos y si alguien simplemente toma como base este código para hacer "una aplicación sencilla" que después crece, y ya no se toman la molestia de leer los ejemplos subsecuentes donde se corrigen estos problemas, ya hay más código allá afuera que tiene problemas que luego no saben ni por qué se les cae el sitio y lo tienen que estar reiniciando, etc.
Primero: que bueno que te
Primero: que bueno que te animes a postear tus ejemplos.
Segundo ( y sé que parecerá injusto pero ) ten cuidado con esto:
Acá se ha posteado mucho sobre la injección de SQL. Utiliza un prepared statement. Recueda a Bobby tables
Entendido y Anotado!
Primero agradecerles por las observaciones y opiniones, lo que se planeo fue publicar una secuencia de entradas en las que se fuera profundizando en el tema del manejo de conexiones a la BD y el uso de Servlets y JSP's, esto es solo el comienzo, entiendo las recomendaciones que me hacen pero como saben los usuarios que esta mal hecho sino se muestra como es mejor, me parece que si mostramos desde como se hace de la forma mas sencilla, arriesgando la seguridad y la disponibilidad, entre muchas otras cosas, y luego hacer el mismo ejercicio implementando ya metodologias mas complejas, lo que quiero mostrar es que no es dificil entrar a tocar temas como pool de conexiones, hibernate, struts, etc. Me acuerdo que en mis epocas de estudiante veia un ejemplo JEE complejo y me asustaba de lo complejo que era, de no entender que eran estos frameworks. XD. Pero seguiremos mostrando mas de JEE. Seguiremos adelante!!!
Entendido pero...
Entiendo lo que quieres decir, pero una cosa es mostrar código simplificado y otra código erróneo y sin ningún tipo de aviso. No hace falta entrar en temas complejos de datasources, si no lo consideras necesario, pero el código JDBC a pelo se puede escribir de forma correcta y sin causar muchos problemas excepto que no sea muy eficiente. Pero el código que muestras tú es inseguro, dejar conexiones sin cerrar y con un simple frame o un reolad demasiado rápido daría problemas difíciles de entender para un novato, debidos a la concurrencia.
Dejar código así "suelto" por Internet es un peligro :D
y cómo, según ustedes sería
y cómo, según ustedes sería un ejemplo muy sencillo de una conexión correcta ?
cambios en tu diseño
Para empezar, tu clase Conexion no debería existir. En serio, usarla es peor que si no existiera; si la quitas del ejemplo, entonces tienes que poner la única línea de código que vale la pena de esa clase, en el código donde normalmente usas Conexion (la otra línea, donde cargas el driver JDBC, debería ir en el inicializador de la aplicación, o de alguna clase, si es que el contenedor no la carga por ti).
Luego,
Usuario.consultarUsuariodebe usarfinally. Ese patrón no es nada nuevo bajo el sol:try {
//obtener la conexion
//usarla
} catch (SQLException ex) {
//generar un error que pueda ver el usuario, etc
} finally {
try {
if (c!=null) c.close();
} catch (SQLException ex) {
//aqui ya ni que hacer, nomas dejar un log de que ni cerrar la conexion se pudo
}
}
Ese patrón de uso es tan común, que en Java 7 ya metieron azúcar sintáctica para hacerlo más fácil, el famoso try with resources. aquí un ejemplo de uso.
lo mismo que dicen todos
buenos consejos compañeros
salduos :I
MUCHO BLA BLA BLA
a todos los señores que llegaron a corregir, pongan algunos ejemplos de la manera correcta que se debe hacer porfavor... no se vale nada mas dar sombrerazos! a los que tratan de aportar algo...
Ok
En un rato subo una forma de hacerlo de forma sencilla pero slavando los puntos ya indicados
Re:Ok
Puras falsas promesas D: , yo también quiero ver como realizan las conexiones ustedes porque yo lo hago según el libro de Deitel y no es como el ejemplo que coloco Enrique.
Una pequeña mejora con Spring JDBC
Hola, actualmente estoy ayudando a unos amigos a aprender Spring JDBC, quizas el material que estamos creando pueda ayudar para este post
https://github.com/javadabadoo/chachareando
Saludos:)
Apoyo Spring JDBC
Aún en la aplicación más patito de base de datos se terminan realizando siempre las mismas operaciones, abrir conexión, crear sentencia, ejecutar sentencia,.. cerrar conexión...
Los primeros ejemplos y tutoriales que leemos nos guían a utilizar JDBC "pelón", dígamos a bajo nivel.
Luego viene lo más sofisticado cuando nos pasamos a los frameworks tipo Hibernate, Toplink, etc.
Algo intermedio, y que a mí en lo particular me gusta mucho para cierto tipo de apps, es el framework JDBC de Spring.
Sí tienen oportunidad hay que darle una leída. Cito:
"The Spring Framework takes care of all the grungy, low-level details that can make JDBC such a tedious API to develop with."
http://static.springsource.org/spring/docs/2.0.x/reference/jdbc.html
Sale y vale
Byte