Ver Mensaje Individual
  #64 (permalink)  
Antiguo 14/05/2008, 09:29
Avatar de Lino-kun
Lino-kun
 
Fecha de Ingreso: mayo-2008
Ubicación: Cuernavaca Morelos Mexico
Mensajes: 126
Antigüedad: 15 años, 11 meses
Puntos: 2
Re: FAQ's de Java

Tema: NET y MVC
Pregunta: Clases DAO?
Respuesta: Como se vio anterior mente. Una clase DAO sirve para comunicarse con la BD.

Clases DAO son de acceso a bases de datos, este es un ejemplo de clase DAO.

Código PHP:
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import com.lino.prueba.utils.*;
import com.lino.prueba.dto.*;

public class 
DireccionDAO {

    public 
DireccionDAO(){}
    
    public 
DireccionDTO getDireccion(String postalCodethrows Exception{
        
Connection con=null;
        
PreparedStatement ps=null;
        
ResultSet rs=null;
                   
DireccionDTO direccionDTO=null;
        
        
String query="select CodigoPostal from Direcciones where CodigoPostal=?";
        
        try{
          
con=ConnectionFactory.getConnection();
          
ps=con.prepareStatement(query);
          
ps.setString(1,postalCode);
          
rs=ps.executeQuery();
          if(
rs.next()){
                  
direccionDTO=new DireccionDTO();
              
direccionDTO.setPostalCode(postalCode);
              
direccionDTO.setCuidad(rs.getString("cuidad"));
              
direccionDTO.setMunicipio(rs.getString("municipio"));
          }
        }catch(
Exception e){
          throw new 
Exception(e.getMessage());
        }
finally{
          if(
rs!=null){
               
rs.close();
          }if(
ps!=null){
              
ps.close();
          }
          
ConnectionFactory.closeConnection(con);
        }
        return 
direccionDTO;
    } 
Lo que hace esta clase es una consulta a la base de datos en el comando ps.setString(1,postalCode); se sustituye el signo ? por el contenido del string lo que hace que la consulta sea portable independientemente del DBMS. Para la implementación de la clase ConnectionFactory vean la página anterior en la pregunta de Acceso a datos con un jndi. Esta consulta trae un registro el cual se almacena en un objeto DTO y se transfiere.

Para preparar la consulta.
Código PHP:
          con=ConnectionFactory.getConnection();
          
ps=con.prepareStatement(query);
          
ps.setString(1,postalCode);
          
rs=ps.executeQuery(); 
Es aquí donde se llama a la clase estática y a su método getConnection() ( ConnectionFactory.getConnection), si el lector ha notado en la sentencia sql almacenada en el String query hay una parte así CodigoPostal=? Esto con el fin de establecer ese parámetro como un String, int o con algún otro dato esto se hace con la instrucción ps.setString(1,postalCode);

La sentencia
Código PHP:
if(rs.next()){
      
direccionDTO=new DireccionDTO();
    
direccionDTO.setPostalCode(postalCode);
    
direccionDTO.setCuidad(rs.getString("cuidad"));
    
direccionDTO.setMunicipio(rs.getString("municipio"));

Valida si existe esa información, el rs (ResultSet) tiene un metodo llamado next(), si al realizar una consulta esta devuelve por lo menos un registrio rs.next() encontrará una respuesta, en caso contrario no producira nada, como esta consulta es devuelve un solo elemento basta con ejecutar rs.next() una vez, si entra en el if significa que la consulta fue exitosa.

En caso de una excepción se tira para arriba, hay que recordar siempre en conexiones a bases de datos cerrar las conexiones que se habrán, para eso usamos la sentencia finally y dentro de ella cerramos la conexión.