Procedimiento y Resultados:
Modelo entidad relación: “tienda”
1. Acceso a BD desde una aplicación de
consola
Aplicacion1.java
package proyecto.dao;
import java.sql.* ;
public class Aplicacion1 {
public static void
main(String[] args) {
try {
Connection con =
DriverManager.getConnection("jdbc:mysql://localhost/tienda", "root", "");
Statement stmt =
con.createStatement();
String
idUsuario = "esaavedra";
ResultSet
rs = stmt.executeQuery("select
id_usuario,clave,nombres,paterno,materno,correo,direccion,telefono,estado from
usuario where id_usuario=' " + idUsuario + " ' ");
if(rs.next())
{
System.out.println("Nombres:
" + rs.getString(3));
System.out.println("Paterno: " + rs.getString("paterno"));
System.out.println("Correo: " + rs.getString("correo"));
}
rs.close();
stmt.close();
con.close();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
2. Acceso a BD desde una aplicación de
consola usando DAO
Usuario.java
package proyecto.modelo;
public class Usuario
{
private
String idUsuario;
private
String clave;
private
String nombres;
private
String paterno;
private
String materno;
private
String correo;
private
String direccion;
private
String telefono;
private
String estado;
/* CREAR LOS MÉTODOS GET Y SET
PARA CADA ATRIBUTO */
}
UsuarioDAO.java
package proyecto.dao;
import java.sql.*;
public class UsuarioDAO {
public Usuario
obtenerPorIdUsuario(String idUsuario){
Usuario vo
= new Usuario();
try {
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://localhost/tienda", "root", "");
Statement stmt = con.createStatement();
ResultSet
rs = stmt.executeQuery("select
id_usuario,clave,nombres,paterno,materno,correo,direccion,telefono,estado from
usuario where id_usuario='"+
idUsuario + "'");
if(rs.next()) {
vo.setIdUsuario(rs.getString("id_usuario"));
vo.setClave(rs.getString("clave"));
vo.setNombres(rs.getString("nombres"));
vo.setPaterno(rs.getString("paterno"));
vo.setMaterno(rs.getString("materno"));
vo.setCorreo(rs.getString("correo"));
vo.setDireccion(rs.getString("direccion"));
vo.setTelefono(rs.getString("telefono"));
vo.setEstado(rs.getString("estado"));
}
rs.close();
stmt.close();
con.close();
} catch
(ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return
vo;
}
}
Aplicacion2.java
package proyecto.dao;
public class
Aplicacion2 {
public static void main(String[] args) {
UsuarioDAO
dao = new UsuarioDAO();
Usuario u
= dao.obtenerPorIdUsuario("esaavedra");
System.out.println(u.getNombres());
System.out.println(u.getPaterno());
System.out.println(u.getMaterno());
}
}
·
En la clase UsuarioDAO, implementar los siguientes métodos:
public Collection<Usuario> buscarPorNombre(String nombre) {
String query =
"select
id_usuario,clave,nombres,paterno,materno,correo,direccion,telefono,estado from
usuario where nombres like '%"+nombre +"%'";
Collection<Usuario> c = new
ArrayList<Usuario>();
try
{
Connection con = ConexionBD.obtenerConexion();
Statement stmt = con.createStatement();
ResultSet rs =
stmt.executeQuery(query);
while(rs.next()) {
Usuario vo = new Usuario();
vo.setIdUsuario(rs.getString("id_usuario"));
vo.setClave(rs.getString("clave"));
vo.setNombres(rs.getString("nombres"));
vo.setPaterno(rs.getString("paterno"));
vo.setMaterno(rs.getString("materno"));
vo.setCorreo(rs.getString("correo"));
vo.setDireccion(rs.getString("direccion"));
vo.setTelefono(rs.getString("telefono"));
vo.setEstado(rs.getString("estado"));
c.add(vo);
}
rs.close();
stmt.close();
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
return c;
}
public Usuario insertar(Usuario vo) {
String query = "INSERT INTO usuario
(id_usuario,clave,nombres,paterno,materno,correo,direccion, telefono,estado)
"
+ "VALUES
(?,?,?,?,?,?,?,?,?)";
System.err.println(query);
Connection con = null;
PreparedStatement stmt = null;
try {
con =
ConexionBD.obtenerConexion();
stmt =
con.prepareStatement(query);
stmt.setString(1,
vo.getIdUsuario());
stmt.setString(2,
vo.getClave());
stmt.setString(3,
vo.getNombres());
stmt.setString(4,
vo.getPaterno());
stmt.setString(5,
vo.getMaterno());
stmt.setString(6, vo.getCorreo());
stmt.setString(7,
vo.getDireccion());
stmt.setString(8,
vo.getTelefono());
stmt.setString(9,
vo.getEstado());
int i =
stmt.executeUpdate();
if (i != 1) {
throw new
SQLException("No se pudo insertar");
}
stmt.close();
con.close();
} catch (SQLException e) {
System.err.println(e.getMessage());
}
return vo;
}
public Usuario actualizar(Usuario vo) {
String query = "UPDATE usuario SET
clave=?, nombres=?, paterno=?, materno=?, correo=?, direccion=?, telefono=?,
estado=? WHERE id_usuario=?";
try {
Connection con =
ConexionBD.obtenerConexion();
PreparedStatement stmt =
con.prepareStatement(query);
stmt.setString(1, vo.getClave());
stmt.setString(2, vo.getNombres());
stmt.setString(3, vo.getPaterno());
stmt.setString(4, vo.getMaterno());
stmt.setString(5, vo.getCorreo());
stmt.setString(6,
vo.getDireccion());
stmt.setString(7, vo.getTelefono());
stmt.setString(8, vo.getEstado());
stmt.setString(9,
vo.getIdUsuario());
int i = stmt.executeUpdate();
if(i != 1){
throw new SQLException("No
se pudo actualizar");
}
stmt.close();
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
return vo;
}
public void
eliminar(String idUsuario) {
String query = "DELETE FROM
usuario WHERE id_usuario=?";
try
{
Connection con =
ConexionBD.obtenerConexion();
PreparedStatement stmt = con.prepareStatement(query);
stmt.setString(1, idUsuario);
int i = stmt.executeUpdate();
if(i != 1){
throw new SQLException("No
se pudo eliminar");
}
stmt.close();
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
public Collection<Usuario>
listarTodos() {
Collection<Usuario> c = new
ArrayList<Usuario>();
try
{
Connection con =
ConexionBD.obtenerConexion();
Statement stmt =
con.createStatement();
ResultSet rs = stmt.executeQuery("select
id_usuario,clave,nombres,paterno,materno,correo,direccion,telefono,estado from
usuario");
while (rs.next()) {
Usuario vo = new Usuario();
vo.setIdUsuario(rs.getString("id_usuario"));
vo.setClave(rs.getString("clave"));
vo.setNombres(rs.getString("nombres"));
vo.setPaterno(rs.getString("paterno"));
vo.setMaterno(rs.getString("materno"));
vo.setCorreo(rs.getString("correo"));
vo.setDireccion(rs.getString("direccion"));
vo.setTelefono(rs.getString("telefono"));
vo.setEstado(rs.getString("estado"));
c.add(vo);
}
rs.close();
stmt.close();
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
return c;
}
3. Acceso a BD desde una aplicación Web usando capas
Se rehusarán
las clases Usuario y UsuarioDAO del ejercicio 2.
Estructura del proyecto
/src
|- / proyecto.dao
|-
UsuarioDAO
|-
ConexionBD
|- / proyecto.servlet
|-
UsuarioBuscarServlet
|- /
proyecto.modelo
|-
Usuario
Agregar el método en
UsuarioBuscarServlet.java
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
UsuarioDAO dao = new UsuarioDAO();
Collection c =
dao.buscarPorNombre(request.getParameter("nombre"));
request.setAttribute("USUARIOS", c);
RequestDispatcher rd =
request.getRequestDispatcher("/usuario_buscar.jsp");
rd.forward(request, response);
}
usuario_buscar.jsp
<%@page import="java.util.*, proyecto.modelo.Usuario" %>
<html>
<head>
<title>Usuario
Buscar</title>
</head>
<body>
<form name="f1" action="UsuarioBuscarServlet" method="post">
Nombre: <input type="text" name="nombre"/>
<input type="submit" name="enviar"
value="Buscar"/>
</form>
<table
border="1">
<tr>
<th>Id</th><th>Nombre</th><th>Paterno</th><th>Email</th>
</tr>
<%
Collection<Usuario>
c = (ArrayList<Usuario>)request.getAttribute("USUARIOS");
if(c != null) {
for(Usuario vo : c) {
out.println("<tr><td>"+vo.getIdUsuario()+"</td>");
out.println("<td>"+vo.getNombres()+"</td>");
out.println("<td>"+vo.getPaterno()+"</td>");
out.println("<td>"+vo.getCorreo()+"</td></tr>");
}
}
%>
</table>
</body>
</html>
los metodos que cierran el resultset, statement y la conexion nunca deben estar en el bloque try. Siempre deben de ir en el bloque finally. Corrígelos !!
ResponderEliminarpublic AdminMenuBean getDAO(AdminMenuBean t) {
ResponderEliminarConnection cn = null;
CallableStatement cs = null;
ResultSet rs = null;
ConexionOracle bd = ConexionOracle.getInstance();
AdminMenuBean adminMenuBean = new AdminMenuBean();
try {
cn = bd.getConexionBD();
String procedimiento = "SP_MENU_GETBYID";
String sql = "{call " + esquema + "." + paquete + "." + procedimiento + "(?,?)}";
cs = cn.prepareCall(sql);
//Parametro de salida de tipo cursor
cs.setInt(1, t.getId());
cs.registerOutParameter(2, OracleTypes.CURSOR);
cs.execute();
rs = (ResultSet) cs.getObject(2);
while (rs.next()) {
adminMenuBean.setId(rs.getInt("IDMENU"));
adminMenuBean.setNombre(rs.getString("NOMBRE"));
adminMenuBean.setDescripcion(rs.getString("DESCRIPCION"));
adminMenuBean.setIdMenuPadre(rs.getInt("IDMENUPADRE"));
adminMenuBean.setVer(rs.getString("VER"));
adminMenuBean.setTipo(rs.getInt("TIPO"));
adminMenuBean.setIdPagina(rs.getInt("IDPAGINA"));
adminMenuBean.setOrden(rs.getInt("ORDEN"));
}
} catch (Exception ex) {
this.printMessage("get(AdminMenuBean t)", ex);
} finally {
bd.close(cn, cs);
}
return adminMenuBean;
}
utiliza mejor try with resources.
ResponderEliminar