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

[SOLUCIONADO] no puedo obtener los datos de un resulset

Estas en el tema de no puedo obtener los datos de un resulset en el foro de Java en Foros del Web. gracias por la atencion,, lo que me pasa es que en mi programa java,, tengo una clase de tipo Reserva , que a su vez ...
  #1 (permalink)  
Antiguo 28/05/2013, 17:12
jd7
 
Fecha de Ingreso: mayo-2013
Mensajes: 11
Antigüedad: 11 años, 5 meses
Puntos: 0
Pregunta no puedo obtener los datos de un resulset

gracias por la atencion,, lo que me pasa es que en mi programa java,, tengo una clase de tipo Reserva , que a su vez contiene un ArrayList de tipo Servicio
al momento de crear un objeto de tipo Servicio, desde una consulta (ResultSet) me crea los servicios del mismo valor, en mi bd, cada reserva tiene varios servicios, pero al momento de consultarlos en java no me cargar todos sino que se duplica el mismo servicio
Código Java:
Ver original
  1. ResultSet result1 = s.executeQuery ("select * from serviciosReserva where reservas_numReserva="+reserva.getNumero());
  2.                            
  3. if(result1.next()){
  4.        result1.beforeFirst();
  5.        java.util.ArrayList<Servicio> servicios = new java.util.ArrayList<Servicio>();
  6.                                
  7.        while (result1.next()){
  8.                                    
  9.        String ser = result1.getString("servicio_id");
  10.     Servicio sr = servicioDao.consultar(ser);
  11.     System.out.println(sr.getNombre());// muestra cada servicio,, asta alli cada muestra es distinta,
  12.     servicios.add(sr);//cuando agrego el servcio,
  13.                                    
  14.        }
  15.                            
  16. reserva.setServicios(servicios); // aqui coloco el arrayList completo a el atributo en
  17.  
  18. }
  19. else reserva.setServicios(null);
  20.                                                                    
  21. return reserva;
  22.  
  23. // pero cuando intento acceder a el servicio
  24. reserva.getServicios().get(1).getIde();
  25. reserva.getServicios().get(2).getIde();
son iguales,, en este caso son solamente dos,, pero cada objeto de la clase reserva puede tener asta 5 servicios, y todos salen iguales desde el get

Última edición por gnzsoloyo; 28/05/2013 a las 18:57 Razón: Codigo no etiquetado.
  #2 (permalink)  
Antiguo 28/05/2013, 19:02
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: no puedo obtener los datos de un resulset

Java no es tema de MySQL, y lo que hagas con el lenguaje de programación no es relevante para las consultas.
La consulta está sintácticamente bien hecha, pero si no te devuelve lo que necesitas, es que las condiciones que le estás poniendo no son las adecuadas, o bien no estás realizando los JOIN necesarios.
Lamentablemente no nos estas dando ninguna pista referida a la estructura de datos, por lo que es de presuponer que el problema no está alli.
Muevo al foro de Java para que verifiques si es un tema con los objetos de java (que son off topic en BBDD).
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 29/05/2013, 07:54
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años, 6 meses
Puntos: 306
Respuesta: no puedo obtener los datos de un resulset

¿Cómo es el método servicioDao.consultar(ser)?

Compruebas sr.getNombre() pero luego buscas getIde(), comprueba lo mismo que buscas.

¿Cómo es el método reserva.getServicios().get(1) ?
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #4 (permalink)  
Antiguo 29/05/2013, 08:26
jd7
 
Fecha de Ingreso: mayo-2013
Mensajes: 11
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: no puedo obtener los datos de un resulset

Cita:
Iniciado por Xerelo Ver Mensaje
¿Cómo es el método servicioDao.consultar(ser)?

Compruebas sr.getNombre() pero luego buscas getIde(), comprueba lo mismo que buscas.

¿Cómo es el método reserva.getServicios().get(1) ?
le coloque sr.getNombre() , para que me muestre el nombre de cada serivcio de la consulta, pero es solamente para verificar que si me resive correctamente el objeto, antes de agregarlo,, y efectiva mente me retorna siempre el objeto deseado,,

,, muchas gracias por contestar,, veran mi problema en especifico, es que al momento de dar el - servicios.add(); - me agrega el mismo objeto Servicio, o mas bn me agregar repetidamente el mismo objeto,,

reserva.getServicios().get(1) este get lo hago para obtener el valor del primer elemento del arrayList que tiene cada reserva,, pero solamente es para comprovar que agrego correctamente cada servicio,,
aqui es donde me doi cuenta que todos los objetos que agrego son iguales :(


en cuanto a la consulta se que esta bn escrita, porque me devuelve los datos que nececito, mi problema es al agregarlos en el arrayList<Servicio>


adujunto el codigo del metodo para consultar el servicio

public Servicio consultar(String ide) throws ClassNotFoundException, SQLException{

conexion = fachadaDB.conectar();
ResultSet result = null;
Statement s = conexion.createStatement();
result = s.executeQuery ("select * from servicio where id='"+ide+"'");

if(result.next()){

servicio.setIde(result.getObject("id").toString()) ;
servicio.setNombre(result.getObject("Nombre").toSt ring());
servicio.setPrecio(Integer.parseInt(result.getObje ct("Precio").toString()));

return servicio;
}
else return null;


}


de antemano gracias por su ayuda
  #5 (permalink)  
Antiguo 29/05/2013, 09:05
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años, 6 meses
Puntos: 306
Respuesta: no puedo obtener los datos de un resulset

Cita:
le coloque sr.getNombre() , para que me muestre el nombre de cada serivcio de la consulta, pero es solamente para verificar que si me resive correctamente el objeto, antes de agregarlo,, y efectiva mente me retorna siempre el objeto deseado,,
Sí, pero tú haces la búsqueda del servicio por el Ide ¿y si el nombre es distinto pero el Ide es el mismo en todos? Por eso te digo que lo compruebes.

Los arraylist empiezan en 0, por lo que no entiendo que busques en el índice 2 (elemento 3), y entiendo menos que te devuelva algo.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #6 (permalink)  
Antiguo 29/05/2013, 09:18
jd7
 
Fecha de Ingreso: mayo-2013
Mensajes: 11
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: no puedo obtener los datos de un resulset

mi problema al rellenar,, es que el ultimo registro,, en agregarse, sobreescribe todos los datos
osea,, si agrego
servicios.add(servicio1),
servicios.add(servicio2),
servicios.add(servicio3),

todos los servicios de el arrayList seran servicio3,,
  #7 (permalink)  
Antiguo 29/05/2013, 09:20
jd7
 
Fecha de Ingreso: mayo-2013
Mensajes: 11
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: no puedo obtener los datos de un resulset

Cita:
Iniciado por Xerelo Ver Mensaje
Sí, pero tú haces la búsqueda del servicio por el Ide ¿y si el nombre es distinto pero el Ide es el mismo en todos? Por eso te digo que lo compruebes.

Los arraylist empiezan en 0, por lo que no entiendo que busques en el índice 2 (elemento 3), y entiendo menos que te devuelva algo.
los System.out.println(); son solo para prueba ;) ,, son temporales solamente
  #8 (permalink)  
Antiguo 29/05/2013, 10:58
jd7
 
Fecha de Ingreso: mayo-2013
Mensajes: 11
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: no puedo obtener los datos de un resulset

muchas gracias por la ayuda,, para los que tengan el mismo problema que yo,, en algún momento, les dejo el código con el problema ya corregido,,

esto se da, porque al momento de añadir los objetos al arrayList, todos estaban apuntando a la misma dirección en memoria

en mi caso lo solucione,, añadiendo un constructor en la clase servicio que tomaba los valores necesarios , de esta forma cada vez que agrego un objeto a el arrayList, este es creado completamente y con una nueva dirección

ResultSet result1 = s.executeQuery ("select * from serviciosReserva where reservas_numReserva="+reserva.getNumero());

if(result1.next()){

result1.beforeFirst();

while (result1.next()){

Servicio servicio = servicioDao.consultar(result1.getString("servicio_ id").toString());
reserva.agregarServicio(new Servicio(servicio.getIde(),servicio.getNombre(),se rvicio.getPrecio()));
}

}

else reserva.setServicios(null);

return reserva;
  #9 (permalink)  
Antiguo 29/05/2013, 11:04
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años, 6 meses
Puntos: 306
Respuesta: no puedo obtener los datos de un resulset

Tu problema es que cuando llamas a servicioDao.consultar()

el objeto servicio que devuelves no es un objeto nuevo, estás escribiendo datos siempre en el mismo objeto. Realmente tu arraylist servicios no está apuntando a tres objetos, apunta al mismo tres veces.

Edito: Veo que ya te has dado cuenta.

Tu método es chapucero, lo que tienes que hacer es dentro de consultar() crear un servicio nuevo cada vez.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #10 (permalink)  
Antiguo 29/05/2013, 11:10
jd7
 
Fecha de Ingreso: mayo-2013
Mensajes: 11
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: no puedo obtener los datos de un resulset

Cita:
Iniciado por Xerelo Ver Mensaje
Tu problema es que cuando llamas a servicioDao.consultar()

el objeto servicio que devuelves no es un objeto nuevo, estás escribiendo datos siempre en el mismo objeto. Realmente tu arraylist servicios no está apuntando a tres objetos, apunta al mismo tres veces.

Edito: Veo que ya te has dado cuenta.

Tu método es chapucero, lo que tienes que hacer es dentro de consultar() crear un servicio nuevo cada vez.
;) tienes razón,, solo que lo dje asi para que se pudiera ver la diferencia con el otro que coloque al inicio,, gracias por la atencion ,

Etiquetas: java-mysql, mysql, mysql+consulta
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 08:45.