miércoles, 2 de octubre de 2013

JDBC



Procedimiento y Resultados:


Modelo entidad relación: “tienda”
  

JDBC


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());
         }
      }
·         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>
 
 
 

3 comentarios:

  1. 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 !!

    ResponderEliminar
  2. public AdminMenuBean getDAO(AdminMenuBean t) {
    Connection 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;
    }

    ResponderEliminar