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

error en ResulSet

Estas en el tema de error en ResulSet en el foro de Java en Foros del Web. Tengo el siguiente codigo: while (en.hasMoreElements()){//recorre la lista de planes vistos p=(PlanVisto)en.nextElement(); //hay que buscar en la BD si el plan_alumno ya existe sqlSelect="SELECT * ...
  #1 (permalink)  
Antiguo 24/06/2007, 11:24
 
Fecha de Ingreso: mayo-2007
Mensajes: 88
Antigüedad: 17 años
Puntos: 0
error en ResulSet

Tengo el siguiente codigo:

while (en.hasMoreElements()){//recorre la lista de planes vistos
p=(PlanVisto)en.nextElement();
//hay que buscar en la BD si el plan_alumno ya existe

sqlSelect="SELECT * FROM plan_alumno WHERE idPlan="+p.obtId()+" and dniAlumno='"+pAlum.obtDni()+"'" ;
st = pCon.createStatement();
rs=st.executeQuery(sqlSelect);
rs.first();

if (rs == null){//el plan_alumno no existe, con lo cual se inserta
fechaI=PruebaControlador.convertirFechaSQL(p.obtFe chaIni());
fechaF=PruebaControlador.convertirFechaSQL(p.obtFe chaFin());
sql="INSERT INTO plan_alumno(idPlan,dniAlumno,notaAlumno,actual,fec haIni,fechaFin) VALUES("+p.obtId()+",'"+pAlum.obtDni()+"',"
+ p.obtNotaMedia() +",0,'" + fechaI + "','" + fechaF +"');";
stmt.executeUpdate(sql);
}

}

El problema es que nunca pasa por la condicion de "rs == null" , no se si eso se puede poner asi. He probado a poner antes de esa condicion la siguiente instruccion: rs.first() , para que valla al primero pero nada de nada, sigue sin pasar.

Una ayudita por favor!!
  #2 (permalink)  
Antiguo 27/06/2007, 01:30
Avatar de Laforge  
Fecha de Ingreso: noviembre-2004
Ubicación: Galaxia 34, Cuadrante 972, Área 31
Mensajes: 174
Antigüedad: 19 años, 5 meses
Puntos: 2
Re: error en ResulSet

1. El problema no es de MySQL, sino del lenguaje de programación
2. No especificas el lenguaje que estás utilizando
3. Evita poner código que no sea 'vinculante' para el problema en cuestión

...de esta forma, ayudarte va a ser mucho más fácil...

De todas formas, para ver si un recordset está vacío no se utiliza la comparación con null, sino propiedades tipo RecordCount (en caso de disponer de ella) o tipo EOF (End Of File). Normalmente, después de cargar (o intentar cargar) datos en un recordset, si la consulta no devuelve ningún resultado la propiedad RS.EOF = true.

Saludos
__________________
Nunca esperes un mejor momento para abrir esa botella de vino...........nunca llega.

No hay vida después de MySQL
  #3 (permalink)  
Antiguo 27/06/2007, 15:10
Avatar de BrujoNic
Super Moderador
 
Fecha de Ingreso: noviembre-2001
Ubicación: Costa Rica/Nicaragua
Mensajes: 16.935
Antigüedad: 22 años, 5 meses
Puntos: 655
Re: error en ResulSet

Trasladado de BD a PHP. Favor no poner código de programación en BD.

Función de la sección de Base de Datos
__________________
La tecnología está para ayudarnos. No comprendo el porqué con esa ayuda, la gente escribe TAN MAL.
NO PERDAMOS NUESTRO LINDO IDIOMA ESPAÑOL
  #4 (permalink)  
Antiguo 27/06/2007, 15:36
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: error en ResulSet

Trasladado de PHP a JSP que es no es lo mismo que PHP
  #5 (permalink)  
Antiguo 28/06/2007, 02:27
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 2 meses
Puntos: 10
Re: error en ResulSet

Wenas

Que la consulta no devuelva resultados no significa que el resultset sea nulo. Ademas la prueba de que no es nulo la tienes en el propio codigo. si el resultset fuese nulo al hacer rs.first() te daria un buen castañazo.

Si lo que quieres es saber que no existe el planalumno ese, lo que podrias hacer es hacer un select count.

Si el select count te devuelve 0, insertas, si no actualizas.

Siempre te devolvera resultado y la consulta es bastante mas rapida que lo que estas haciendo.

Ojo, esto solo te vale si lo que quieres es saber si existe o no existe.

Saludos.
  #6 (permalink)  
Antiguo 02/07/2007, 10:26
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Re: error en ResulSet

Hola,
rs.next() devuelve true si hay algun resultado en el resultset, no hace falta hacer un count para ver si hay o no resultados.

Con lo bonito que es el API y que tan poca gente lo lea... ains .
  #7 (permalink)  
Antiguo 03/07/2007, 02:01
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 2 meses
Puntos: 10
Re: error en ResulSet

Cita:
Iniciado por GreenEyed Ver Mensaje
Hola,
rs.next() devuelve true si hay algun resultado en el resultset, no hace falta hacer un count para ver si hay o no resultados.

Con lo bonito que es el API y que tan poca gente lo lea... ains .
Claro que no hace falta.

Pero si lo unico que quieres es saber si hay resultados o no un select count es, en la mayoria de las ocasiones, bastante mas rapido que un select * y por lo tanto tu proceso sera mas eficiente.

Saludos.
  #8 (permalink)  
Antiguo 03/07/2007, 02:59
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Re: error en ResulSet

Si buscas una sola fila por indice, no creo que sea mucho menos eficiente que hacer un count, pero bueno. Sólo queria decir que se puede comprobar si ha devuelto algo sin tener que hacer un "select count()", para que la gente no se confunda y haga primero un count y luego el select en otros casos.

Pero si, si lo unico que quieres saber es si hay o no hay una fila con ese codigo, los dos metodos valen. Lo del API no iba por ti .

PD: Yo decia lo de hacer un select normal, por que lo habitual en estos casos es mostrar un mensaje de error diciendo "existe otro usuario con el mismo dni y plan con estos datos: x, y z" y por eso tiendo a ir directamente a obtener los datos. Pero lo dicho, que si no necesitas los datos, tanto da.
  #9 (permalink)  
Antiguo 03/07/2007, 03:34
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 2 meses
Puntos: 10
Re: error en ResulSet

Jajajaja

Por eso no te preocupes, aunque lo del api fuera por mi, me han llamado cosas peores.

Solo estaba refutando porque siempre lo he hecho asi, pero ambos metodos son igualmente validos. Incluso hay ocasiones en tablas con muchos registros que el select normal es mas eficiente que el count.

A ver si vas a tener ahora miedo de corregirme...

Saludos.
  #10 (permalink)  
Antiguo 03/07/2007, 04:33
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Re: error en ResulSet

No, no, sólo que a veces la gente se toma las cosas de cada forma...
Era sólo para "completar" la respuesta y ver que hay mas formas. Lo del rendimiento ya es pa' nota ya que explicar cuando iria mejor una u otra forma sería demasiado extenso.

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 15:02.