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

Urgente!!

Estas en el tema de Urgente!! en el foro de Java en Foros del Web. hola buenas...saben k kiero guardar en una tabla de mi DB una lista... k la paso a un array y lo recorro..lo k no entiendo ...
  #1 (permalink)  
Antiguo 09/12/2009, 00:51
 
Fecha de Ingreso: octubre-2004
Mensajes: 79
Antigüedad: 20 años
Puntos: 0
Urgente!!

hola buenas...saben k kiero guardar en una tabla de mi DB una lista... k la paso a un array y lo recorro..lo k no entiendo es porque me guarda solo el primer elemento y se sale....me podrian ayudar..

salu2

PD: sugerencia recibe la lista

public void inserta(){
try{

int b=0;
int c=0;
Conexion conn = new Conexion();
stm =conn.conectar();
String[] sugere=new String[sugerencia.size()];
sugerencia.toArray(sugere);
int i=0;
for(i=0;i<sugere.length;i++){
frase=sugere[i];

String consulta="SELECT * FROM sugerencias";
rs= stm.executeQuery(consulta);
while(rs.next()){
if(rs.getString(1).equals(frase)){
b=b+1;
c=Integer.parseInt(rs.getString(3).toString());
}}

if(b==0){
b=1;
String registrar="INSERT INTO sugerencias(ID_frase,largo,resultados)VALUE('"+fra se+"','"+frase.length()+"','"+b+"')";
stm.executeUpdate(registrar);
}else{
b=b+c;
String actualiza="UPDATE sugerencias SET resultados='"+b+"' WHERE ID_frase LIKE '"+frase+"'";
stm.executeUpdate(actualiza);
}}
}catch(Exception e){
System.out.println(e);
}

}
  #2 (permalink)  
Antiguo 09/12/2009, 02:40
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 21 años, 1 mes
Puntos: 51
Respuesta: Urgente!!

Para averiguar que es lo que pasa tendrías que depurar un poco la ejecución, averiguando si termina por una excepcion, si lo hace por que las condiciones de salida se cumplen y entonces ver por qué etc.

De todas formas, para recorrer una lista no hace falta pasarla a un array y luego recorrerlo por indice. Para eso existen los Iterator y Enumeration sobre listas, para no tener que hacerlo.

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #3 (permalink)  
Antiguo 09/12/2009, 03:32
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 16 años, 3 meses
Puntos: 188
Respuesta: Urgente!!

Si te fijas bien, el problema lo tienes aquí

}else{
b=b+c;
String actualiza="UPDATE sugerencias SET resultados='"+b+"' WHERE ID_frase LIKE '"+frase+"'";
stm.executeUpdate(actualiza);
}}

Como tras hacer el primer insert b ya no es == 0, lo que intenta a partir de entonces es hacer un update buscando con referencia la frase de sugerencia que venga a partir del segundo elemento en adelante, y como son sugerencias distintas, pues nunca va a hacer updates de nada.

Consejo -> Controla en el equals de frases el update, y para los otros casos else del equals haz los inserts.
  #4 (permalink)  
Antiguo 09/12/2009, 10:43
 
Fecha de Ingreso: octubre-2004
Mensajes: 79
Antigüedad: 20 años
Puntos: 0
Respuesta: Urgente!!

buenas...gracias por sus respuestas,pero hice los cambios y no funciona
me envia un error ahora de este tipo

java.sql.SQLException: Operation not allowed after ResultSet closed
  #5 (permalink)  
Antiguo 09/12/2009, 11:11
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 16 años, 3 meses
Puntos: 188
Respuesta: Urgente!!

Pues tendrás que ver si haces el rs.close() en algun sitio incorrecto, si rs tiene los datos que necesitas, o si tienes todas las operaciones de insert o update correctamente dentro del while(rs.next()) { }.
  #6 (permalink)  
Antiguo 09/12/2009, 11:27
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 21 años, 1 mes
Puntos: 51
Respuesta: Urgente!!

Seguramente sea el problema que estás utilizando el mismo Statement con dos sentencias a la vez. Y según el API:
Cita:
By default, only one ResultSet object per Statement object can be open at the same time. Therefore, if the reading of one ResultSet object is interleaved with the reading of another, each must have been generated by different Statement objects. All execution methods in the Statement interface implicitly close a statment's current ResultSet object if an open one exists.
Así que lo mejor es que uses Statement diferentes si tienes que tener los resultset abiertos a la vez.

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #7 (permalink)  
Antiguo 09/12/2009, 13:26
 
Fecha de Ingreso: octubre-2004
Mensajes: 79
Antigüedad: 20 años
Puntos: 0
Respuesta: Urgente!!

Solucioné el problema.

Antes de llamar al metodo inserta, hago que el constructor solo reciba una frase ya que itero la lista al momento de crear el objeto.
y para el update recogo la idea de nuestro amigo GreenEyed y creé otro Statement llamando a la conexión denuevo.
y para evitar conflictos usé la idea de Fuzzylog de incluir en el equals el update.

Muchas gracias

Buen foro y espero tb ser de ayuda en el.

saludos
  #8 (permalink)  
Antiguo 11/12/2009, 00:11
 
Fecha de Ingreso: diciembre-2009
Mensajes: 1
Antigüedad: 14 años, 11 meses
Puntos: 0
Respuesta: Urgente!!

Yo tenia ese mismo problema y la idea de una nueva coneccion me parecia ineficiente o imnecesaria, pero al probarlo me funciono y solucione ese problema.
  #9 (permalink)  
Antiguo 11/12/2009, 00:17
 
Fecha de Ingreso: octubre-2004
Mensajes: 79
Antigüedad: 20 años
Puntos: 0
Respuesta: Urgente!!

mmm ineficiente.. nosé, pero eso lo veo para destruir el objeto anterior y liberar memoria. De ese punto de vista es la mejor solucion nu crees?

salu2 man
  #10 (permalink)  
Antiguo 11/12/2009, 02:31
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 21 años, 1 mes
Puntos: 51
Respuesta: Urgente!!

No es lo mismo una nueva Connection que un Statement nuevo sobre la misma Connection. Lo primero sí puede ser ineficiente, lo segundo es necesario en muchos casos.

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #11 (permalink)  
Antiguo 11/12/2009, 06:22
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 16 años, 3 meses
Puntos: 188
Respuesta: Urgente!!

Santa razón, GreenEyed!
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 13:14.