Foros del Web » Programación para mayores de 30 ;) » Java »

Consultas con Struts

Estas en el tema de Consultas con Struts en el foro de Java en Foros del Web. Hola a todos tengo algunas duda de como hacer una consulta a una base de datos. Pues bien explicare mi problema: tengo 7 tablas que ...
  #1 (permalink)  
Antiguo 31/03/2009, 15:52
Avatar de optimus100  
Fecha de Ingreso: febrero-2009
Mensajes: 45
Antigüedad: 15 años, 2 meses
Puntos: 0
Exclamación Consultas con Struts

Hola a todos tengo algunas duda de como hacer una consulta a una base de datos. Pues bien explicare mi problema:
tengo 7 tablas que representan los 7 dias de la semana (en mysql) cada tabla contiene 4 campos (idroll, idempleado, horario_x, clase_x) las "x" repesentan los dias (lunes, martes, miercoles,...). La consulta que deseo realizar es que por medio del idempleado me realize la busqueda y como resultado de esa busqueda aparescan en las tablas (dentro del JSP) el problema que tengo es que en el JSP estan diseñadas las tablas de los 7 dias de la semana y quisiera que apareciaran todos los resultados. He investigado y lo mas optimo para realizar esta consulta es utilizar <logic:iterate> pero no se como utilizarlo.
Manejo una clase Form(ActinForm), un VO, un DAO, y el Action. SOlo que no se que deben contener cada una de estas clases, ademas mencionan que el resultado de la busqueda la almacene en un arrayList solo que no se donde implementarla.

Estas son algunos de los codigos que estado utilizando pero solo me devuelve un solo registro y no asi todos los registros de los campos que necesito:

ACTION FORM

Código PHP:

 
public class ConsultarRollForm extends ActionForm{

    private 
int idrn;
    private 
String nomrnaprnamrn;

    private 
String l3l5l7l9l11l13l15l17l19l21l23l25l27l29l31l33//// horario lunes
    
private String l4l6l8l10l12l14l16l18l20l22l24l26l28l30l32l34/// servicio lunes

    
private String m3m5m7m9m11m13m15m17m19m21m23m25m27m29m31m33//// horario martes
    
private String m4m6m8m10m12m14m16m18m20m22m24m26m28m30m32m34/// servicio martes

    
    
public int getIdrn(){
         return 
this.idrn;
    }
   public 
void setIdrn(int idrn){
   
this.idrn=idrn;
   }
    public 
String getNomrn(){
        return 
this.nomrn;
    }
    public 
void setNomrn(String nomrn){
    
this.nomrn=nomrn;
    }
    public 
String getAprn(){
         return 
this.aprn;
    }
    public 
void setAprn(String aprn){
    
this.aprn=aprn;
    }

    public 
String getAmrn(){
        return 
this.amrn;
    }
    public 
void setAmrn(String amrn){
    
this.amrn=amrn;
    }
   public 
String getL3(){
    return 
this.l3;
   }
   public 
void setL3(String l3){
   
this.l3 l3;
   }
   public 
String getL4(){
    return 
this.l4;
   }
   public 
void setL4(String l4){
   
this.l4 l4;
   }
   public 
String getL5(){
    return 
this.l5;
   }
   public 
void setL5(String l5){
   
this.l5 l5;
   }
   public 
String getL6(){
    return 
this.l6;
   }
   public 
void setL6(String l6){
   
this.l6 l6;
   }
   public 
String getL7(){
    return 
this.l7;
   }
   public 
void setL7(String l7){
   
this.l7 l7;
   } 

La clase VO (en ella capturo los datos de la consulta) como se puede observar es igual al FORM
Código PHP:

public class ConsultarRollVO implements Serializable{

    private 
int idrn;
    private 
String nomrnaprnamrn;

    private 
String l3l5l7l9l11l13l15l17l19l21l23l25l27l29l31l33//// horario lunes
    
private String l4l6l8l10l12l14l16l18l20l22l24l26l28l30l32l34/// servicio lunes

    
private String m3m5m7m9m11m13m15m17m19m21m23m25m27m29m31m33//// horario martes
    
private String m4m6m8m10m12m14m16m18m20m22m24m26m28m30m32m34/// servicio martes

     
public int getIdrn(){
         return 
this.idrn;
    }
   public 
void setIdrn(int idrn){
   
this.idrn=idrn;
   }
    public 
String getNomrn(){
        return 
this.nomrn;
    }
    public 
void setNomrn(String nomrn){
    
this.nomrn=nomrn;
    }
    public 
String getAprn(){
         return 
this.aprn;
    }
    public 
void setAprn(String aprn){
    
this.aprn=aprn;
    }

    public 
String getAmrn(){
        return 
this.amrn;
    } 
DAO

Código PHP:
public ConsultarRollVO ConsultarID (ConsultarRollVO conVO)throws Exception
{
    try{
    if(
this.conexion==null){
    
this.getConnection();
    }
    final 
String Sql " SELECT * FROM natacion LEFT JOIN rolllunes ON natacion.idEmpleado = rolllunes.idEmpleado"+
                       
" LEFT JOIN rollmartes ON natacion.idEmpleado=rollmartes.idEmpleado"+
                       
" LEFT JOIN rollmiercoles ON natacion.idEmpleado=rollmiercoles.idEmpleado"+
                       
" LEFT JOIN rolljueves ON natacion.idEmpleado=rolljueves.idEmpleado"+
                       
" LEFT JOIN rollviernes ON natacion.idEmpleado=rollviernes.idEmpleado" +
                       
" LEFT JOIN rollsabado ON natacion.idEmpleado=rollsabado.idEmpleado" +
                       
" LEFT JOIN rolldomingo ON natacion.idEmpleado=rolldomingo.idEmpleado"+
                       
" WHERE natacion.idEmpleado=?";

    
pst conexion.prepareStatement(Sql);
        
pst.setInt(1conVO.getIdrn());

    
resultSet pst.executeQuery();

    while(
resultSet.next()){
        
conVO.setIdrn(resultSet.getInt("idEmpleado"));
        
conVO.setNomrn(resultSet.getString("nombre"));
        
conVO.setAprn(resultSet.getString("app"));
        
conVO.setAmrn(resultSet.getString("apm"));

        
conVO.setL3(resultSet.getString("horario_lunes"));
        
conVO.setL4(resultSet.getString("clase_lunes"));
  }
//// fin del while
        
resultSet.close();
        
pst.close();
        
this.conexion.close();
    }
/// fin del try

    
catch(Exception e){
        
System.out.println(e.getMessage());
          throw new 
Exception(e.getMessage());
    }
return 
conVO;

Y EL ACTION

Código PHP:
public class ConsultarRollAction extends Action{

     public 
ActionForward execute(
                       
ActionMapping mapping
                     
ActionForm form
                    
HttpServletRequest request
                    
HttpServletResponse responsethrows IOExceptionServletException   {

       final 
ConsultarRollForm rollForm= (ConsultarRollFormform;
        
ConsultarRollVO rollVO= new ConsultarRollVO();
        
ConsultarRollVO VO= new ConsultarRollVO();

try{

       
         
rollVO.setIdrn(rollForm.getIdrn());
         

         final 
IngresarRollDAO rollDAO = new IngresarRollDAO();

          
VO rollDAO.ConsultarID(rollVO);

          if (
VO.getIdrn() == 0){
             return 
mapping.findForward("inexistente");
          }
         
         
rollForm.setIdrn(rollVO.getIdrn());
         
rollForm.setNomrn(rollVO.getNomrn());
         
rollForm.setAprn(rollVO.getAprn());
         
rollForm.setAmrn(rollVO.getAmrn());
         
rollForm.setL3(rollVO.getL3());
         
rollForm.setL4(rollVO.getL4());
         
rollForm.setL5(rollVO.getL5());
         
rollForm.setL6(rollVO.getL6());
         
rollForm.setL7(rollVO.getL7());
         
rollForm.setL8(rollVO.getL8());
         
rollForm.setL9(rollVO.getL9());
         
         return 
mapping.findForward("roll");
}
catch(
Exception e){
return 
mapping.findForward("fallo");
}

     }

si alguien pudiera ayudar en como solucinar este problema se los agradecere mucho. o por lo menos que me ayuden a compreder mejor el uso del arraylist y del <logic:iterate>
  #2 (permalink)  
Antiguo 01/04/2009, 03:44
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 3 meses
Puntos: 10
Respuesta: Consultas con Struts

Wenas

El arrayList sera la lista de resultados de la select, o el resultset para que me entiendas.

Por otro lado el logic:iterate no es mas que un for, que te ayudara a mostrar los datos de turno..

En tu config-xml de turno tendras que añadir un nuevo atributo lista, en la declaracion del form.

Código:
<form-property name="lista" type="java.util.ArrayList"/>

Asi en tu codigo DAO tendrias el metodo que devolveria el resultset y seria algo parecido a esto.


Código:
resultSet = pst.executeQuery(); 
ArrayList lista = new ArrayList();
    while(resultSet.next()){ 
        conVO.setIdrn(resultSet.getInt("idEmpleado")); 
        conVO.setNomrn(resultSet.getString("nombre")); 
        conVO.setAprn(resultSet.getString("app")); 
        conVO.setAmrn(resultSet.getString("apm")); 

        conVO.setL3(resultSet.getString("horario_lunes")); 
        conVO.setL4(resultSet.getString("clase_lunes")); 
       lista.add(conVO);
  }//// fin del while
  .....
  
  return lista;
Y en tu action:

Código:
	form.set("lista",ConsultarID());
Por ultimo en la jsp

Código:
										<table>
                        <logic:empty name="NOMBREFORMULARIO_en_configxml" property="lista"> 
                            <tr class="tr006b"> 
                                <td class="td008" colspan="5">No existen datos</td> 
                            </tr> 
                        </logic:empty> 
                        <logic:notEmpty name="NOMBREFORMULARIO_en_configxml" property="lista"> 
                            <logic:iterate id="item" name="NOMBREFORMULARIO_en_configxml" property="lista">
                                <tr class="tr006b"  >
                                    <td class="td008">
                                        <bean:write name="item" property="campo1"/>
                                    </td>
                                    <td class="td008">
                                        <bean:write name="item" property="campo2"/>
                                    </td>
                                    <td class="td008">
                                        <bean:write name="item" property="campo3"/>
                                    </td>
                                    <td class="td008">
                                        <bean:write name="item" property="campo4"/>
                                    </td>
                                 </tr>
                            </logic:iterate>
											</table>
Mas o menos.

Saludos.
  #3 (permalink)  
Antiguo 02/04/2009, 15:08
Avatar de optimus100  
Fecha de Ingreso: febrero-2009
Mensajes: 45
Antigüedad: 15 años, 2 meses
Puntos: 0
Respuesta: Consultas con Struts

Muchas Gracias por responder, y ahora ya entiendo un poco mas el funcionamiento de logic iterate, solo una duda mas en la Clase FORM debo de crear una variable de tipo cadena para capturar los datos de la lista, y ademas con este metodo puedo mostrar en pantalla una tabla que contenga mas de un registro ???, o sea, "n" registros
  #4 (permalink)  
Antiguo 03/04/2009, 02:17
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 3 meses
Puntos: 10
Respuesta: Consultas con Struts

No se si te he entendido, dices de usar un String dentro de un logic:iterate?? Eso no se puede hacer.

No puede ser una variable de tipo cadena. Tendra que ser una secuencia de cadenas (Un String [], un vector, un arraylist, ....).

Si es con una cadena, ademas de no poder usar el logic:iterate, tendrias que separar los regustros y los campos con caracteres especiales, por ejemplo

[CODE]
String registro = "c11@c12@c13#c21@c22@c23";
[CODE]

Siendo @ el 'separador de campos' y # el 'separador de registros'. Y tendrias que hacerlo con un for. Con codigo java dentro de la jsp.

Es a eso a lo que te refieres??

Saludos.
  #5 (permalink)  
Antiguo 03/04/2009, 12:55
Avatar de optimus100  
Fecha de Ingreso: febrero-2009
Mensajes: 45
Antigüedad: 15 años, 2 meses
Puntos: 0
Respuesta: Consultas con Struts

Tal parece que no me explique bien, lo que queria decir es que ya probe el programa con lo que me comentaste y funciona bien. Cuando se trata de obtener la consulta de un solo registro. el problema que tengo es que si deseo mostrar en pantalla... te mencionare un ejemplo;:

1. tengo las tablas lunes, martes, miercoles, .... toda la semana
2. en cada una de las tablas tengo 4 campos (idRoll, idInstructor, horario, clase)
3. necesito realizar la consulta de manera simultanea (al mismo tiempo) de todas y cada una de las tablas, la busqueda la realizo con el idInstructor.
4. el resultado aparecera en una tabla diseñada en jsp (como la que me mostraste)
5. La informacion que aparece en la tabla en la base de datos es la siguiente:

idRoll idInstructor Horario Clase
1 12345 13:45 A
2 54321 20:00 B
3 12345 13:00 C
4 54321 10:00 D


Si asi sucesivamente.... Cuando realizo la busqueda si en las tablas solo tienen un solo registro por ejemplo el idInstructor=12345.

y realizo la consulta como me explicaste no hay problemas aparece perfectamente. El problema se presenta cuando en cada tabla aparesca mas de una vez el idInstructor (como en el ejemplo de arriba) cuando realizo la consulta se genera la consulta, pero como resultado me repite muchas veces la tablas pero con los mismos resultados.(para darme a entender en la pantalla aparece el segundo registro del idInstructor y se repite muchas veces )

y lo que yo quiero es que aparezcan todos los registros de un mismo idInstructor

crees que exista una alternativa a este problema ?????

y gracias de nuevo por tus comentarios
  #6 (permalink)  
Antiguo 04/04/2009, 21:02
Avatar de optimus100  
Fecha de Ingreso: febrero-2009
Mensajes: 45
Antigüedad: 15 años, 2 meses
Puntos: 0
Respuesta: Consultas con Struts

Quizas a un no me di a entender jeje . lo que quiero saber es como puedo mostrar en el JSP como capturar los datos de registros repetidos de una tabla (rolllunes) en ente caso los que tengan el idEmpleado(campo 1) repetido y que muestren los datos que contengan el horario_lunes (campo 2) y la clase_lunes(campo 3).
Dentro de la consulta tengo esto:
Código PHP:

public ArrayList ConsultarLunes (ConsultarRollVO lunVO)throws Exception
{
    try{
    if(
this.conexion==null){
    
this.getConnection();
    }
    final 
String Sql " SELECT * FROM rolllunes WHERE idEmpleado=?";


    
pst conexion.prepareStatement(Sql);
        
pst.setInt(1lunVO.getIdrn());

    
resultSet pst.executeQuery();
    
ArrayList lista= new ArrayList();
    while(
resultSet.next()){
        
        
lunVO.setL3(resultSet.getString("horario_lunes"));
        
lunVO.setL4(resultSet.getString("clase_lunes"));
        
        
lista.add(lunVO);

        }
//// fin del while
        
resultSet.close();
        
pst.close();
        
this.conexion.close();

        return 
lista;
    }
/// fin del try

    
catch(Exception e){
        
System.out.println(e.getMessage());
          throw new 
Exception(e.getMessage());
    }


y en el Action esto:

Código PHP:
public class ConsultarRollAction extends Action{

     public 
ActionForward execute(
                       
ActionMapping mapping
                     
ActionForm form
                    
HttpServletRequest request
                    
HttpServletResponse responsethrows IOExceptionServletException   {

       final 
ConsultarRollForm rollForm= (ConsultarRollFormform;
        
ConsultarRollVO rollVO= new ConsultarRollVO();
        
ConsultarRollVO VO= new ConsultarRollVO();
        
ArrayList lista;

try{

         
///////// Acuafiesta //////////////////////
         
rollVO.setIdrn(rollForm.getIdrn());
         

         final 
IngresarRollDAO rollDAO = new IngresarRollDAO();

             
VO  rollDAO.ConsultarID(rollVO);

         final 
IngresarRollDAO lunesDAO = new IngresarRollDAO();

             
lista lunesDAO.ConsultarLunes(rollVO);
                          
          
rollForm.setIdrn(VO.getIdrn());
          
rollForm.setNomrn(VO.getNomrn());
          
rollForm.setAprn(VO.getAprn());
          
rollForm.setAmrn(VO.getAmrn());
         
           
rollForm.setLista(lista);
         
        
         return 
mapping.findForward("roll");
         
}
catch(
Exception e){
return 
mapping.findForward("fallo");
}

     }

y por ultimo en el form tengo el array de "lista" que se mostrara para el JSP:
Código PHP:
public class ConsultarRollForm extends ActionForm{

    private 
int idrn;
    private 
String nomrnaprnamrn;
    private 
ArrayList lista;

public 
ArrayList getLista(){
    return 
lista;
    }
    public 
void setLista(ArrayList lista){
    
this.lista=lista;
    }

public 
int getIdrn(){
         return 
this.idrn;
    }
   public 
void setIdrn(int idrn){
   
this.idrn=idrn;
   }
    public 
String getNomrn(){
        return 
this.nomrn;
    }
    public 
void setNomrn(String nomrn){
    
this.nomrn=nomrn;
    }
    public 
String getAprn(){
         return 
this.aprn;
    }
    public 
void setAprn(String aprn){
    
this.aprn=aprn;
    }

    public 
String getAmrn(){
        return 
this.amrn;
    }
    public 
void setAmrn(String amrn){
    
this.amrn=amrn;
    } 

idempleado----------horario_lunes----------clase_lunes
12345----------------- 13:45 --------------------- A
12345----------------- 20:00 --------------------- B
12345----------------- 22:00 --------------------- C


Necesito mostrar en pantalla (JSP) todos esos registros repetidos. Hasta ahora solo he conseguido mostrar un resultado y no asi todos aquellos que estan repetidos.
  #7 (permalink)  
Antiguo 06/04/2009, 02:15
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 3 meses
Puntos: 10
Respuesta: Consultas con Struts

Saca una traza de que es lo que estas guardando en el arraylist, y por si acaso añade esto.

Código:
   int idrn =  lunVO.getIdrn();
   pst.setInt(1,idrn); 

    resultSet = pst.executeQuery(); 
    ArrayList lista= new ArrayList(); 
    while(resultSet.next()){ 
        lunVO = new lunVO(); 
        lunVO.setIdrn(idrn);
        lunVO.setL3(resultSet.getString("horario_lunes")); 
        lunVO.setL4(resultSet.getString("clase_lunes")); 
         
        lista.add(lunVO); 

        }//// fin del while
Un arraylist no es mas que una lista de punteros ( a groso modo), al no inicializar en cada paso el lunVO, es muy posible que siempre te este añadiendo el mismo objeto en la lista. Si pasas 5 veces por el while, 5 veces que te añadira el mismo objeto.

No se si me explico.

Saludos.
  #8 (permalink)  
Antiguo 06/04/2009, 13:54
Avatar de optimus100  
Fecha de Ingreso: febrero-2009
Mensajes: 45
Antigüedad: 15 años, 2 meses
Puntos: 0
Respuesta: Consultas con Struts

Muchas pero Muchas muchas gracias me has salvado de un fuerte dolor de cabeza . ya que no lograba que me mostrara mas de un objeto pero ahora ya funciona correctamente. Realmente te estoy muy agradecido. Ya que este es un proyecto escolar muy importante y ahora ya aprendi una o dos cosas mas sobre los STRUTS y los JSP
  #9 (permalink)  
Antiguo 07/04/2009, 00:54
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 3 meses
Puntos: 10
Respuesta: Consultas con Struts

Bueno esto ultimo mas que jsps o struts, es teoria basica de java.

Me alegro por tu cabeza, no es bueno tanto paracetamol.

Saludos.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:46.