martes, 29 de marzo de 2016

JDBC

ver video


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 {
                            Class.forName("com.mysql.jdbc.Driver");
                            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());
         }
}
Creando una clase conexión y los métodos del DAO:
·         Crear la clase ConexionBD
package proyecto.dao;
import java.sql.*;
public final class ConexionBD {
    
     public static Connection obtenerConexion() throws SQLException {
              Connection con = null;
              try {
                       Class.forName("com.mysql.jdbc.Driver");
              } catch (ClassNotFoundException e) {
                       e.printStackTrace();
              }
              con = DriverManager.getConnection("jdbc:mysql://localhost/tienda", "root", "");
              return con;
     }
}


·         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>
Realizar:
  1. Crear una clase padre BaseDAO que mantenga los métodos genéricos para todos los DAO.
  2. Crear una excepción personalizada DAOExcepcion.java que encapsule las excepciones que sucedan en la capa de persistencia.
  3. Las excepciones que sucedan en los DAO no están siendo enviadas a la capa de presentación. Corregir todos los métodos para que lancen excepciones a la capa de presentación (Servlets).

No hay comentarios:

Publicar un comentario