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

Java y Sentencia SQL...

Estas en el tema de Java y Sentencia SQL... en el foro de Java en Foros del Web. Buenos días amigos, soy nuevo entre vosotros, y me alegra poder estar en vuestros foros. Espero poder ser uno más. Estreno mi primer Tema con ...
  #1 (permalink)  
Antiguo 05/06/2008, 18:00
Isdiar
Invitado
 
Mensajes: n/a
Puntos:
Java y Sentencia SQL...

Buenos días amigos,

soy nuevo entre vosotros, y me alegra poder estar en vuestros foros. Espero poder ser uno más.

Estreno mi primer Tema con un problema:
Tengo una BD que quiero administrar desde Java. Creo un método que borre los datos específicos de una tabla, pero no lo hace. Dicho método es el siguiente:
Cita:
public boolean deleteVoluntariosTipoVoluntariado(String idVoluntario, String nombreTipo) {

String comandoSql;


comandoSql = "DELETE FROM voluntarios_has_tipovoluntariado WHERE voluntarios_idVoluntario='" +idVoluntario+ "' AND tipoVoluntariado_nombreTipo='" +nombreTipo+ "'";

if (this.realizarAccion(comandoSql) != true)
return(false);
else
return(true);

} // END_deleteVoluntariosTipoVoluntariado


La cosa es que tengo otro método similar, el cual si me funciona:
Cita:
public boolean deleteUsuarioNombreApellidos(String nombre, String apellidos) {

String comandoSql;


comandoSql = "DELETE FROM usuarios WHERE nombre='" +nombre+ "' AND apellidos='" +apellidos+ "'";

if (this.realizarAccion(comandoSql) != true)
return(false);
else
return(true);

} // END_deleteUsuario





Los nombres de la tabla y de las columnas está revisado, y coinciden con los de la BD. No entiendo qué puede estar pasando. Si me pueden hechar una mano...

Muchas gracias. Un saludo y que Dios les bendiga! :)

Última edición por Isdiar; 06/06/2008 a las 10:25
  #2 (permalink)  
Antiguo 06/06/2008, 09:49
Isdiar
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Java y Sentencia SQL...

Amigos, he encontrado el problema, pero no la solución. La cuestión es que ya se borra correctamente, pero si le mando, por ejemplo, un dato erróneo (lógicamente no lo borrará porque no existe en la BD), me dice que se ha borrado correctamente. El fallo por tanto está en:
Cita:
if (this.realizarAccion(comandoSql) != true)
return(false);
else
return(true);




De este modo, conseguía que me dijese si la acción se había realizado correctamente o no. El problema es que siempre dice que se hace correctamente, aunque no lo haya hecho. Realizar acción tiene las siguientes líneas de código:
Cita:
public boolean realizarAccion(String comandoSql)
{
Statement comando;
try {
comando=conexion.createStatement();
comando.executeUpdate(comandoSql);
comando.close();
descripcionError="";
return(true);
}
catch(Exception e) {
descripcionError=e.getMessage();
return(false);
}
} // END_realizarAccion




Como dije arriba, he encontrado el fallo (el método "realizarAccion"), pero no la solución, pues no sé por qué falla... ¿tenéis alguna idea?

Muchas gracias amigos. Un saludo!

Última edición por Isdiar; 06/06/2008 a las 10:25
  #3 (permalink)  
Antiguo 06/06/2008, 10:07
Avatar de zempox  
Fecha de Ingreso: mayo-2007
Mensajes: 32
Antigüedad: 17 años
Puntos: 1
Respuesta: Java y Sentencia SQL...

mira esta página

http://www.programacion.net/java/tutorial/jdbc/8/#retorno



... busca executeUpdate() ....el cual devuelve un valor ...

espero te sirva
  #4 (permalink)  
Antiguo 06/06/2008, 11:13
Isdiar
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Java y Sentencia SQL...

Gracias "zempox" por tu ayuda. La verdad es que sí me ha servido, aunque ahora no sé solucionar lo siguiente. Explico:

He creado un realizarAccion2 para poder hacer pruebas con él:
Cita:
public boolean realizarAccion2(String comandoSql)
{
Statement comando;
int i=-1;

try {
comando = conexion.createStatement();
i = comando.executeUpdate(comandoSql);
comando.close();
}
catch(Exception e) {
descripcionError=e.getMessage();
}

if(i != 0) {
descripcionError = "";
return(true);
}
else {
descripcionError = e.getMessage();
return(false);
}

} // END_realizarAccion2




Cuando "i" vale 0 es porque ha habido un error durante la ejecución de la sentencia SQL. Por tanto, intento filtrarlo, pero la línea del final que dice "descripcionError = e.getMessage();" me da error en "e", porque dice que puede no estar inicializado. ¿Qué puedo entonces hacer? Es que estoy iniciándome en Java, y aún no domino el TRY - CATCH.

Por cierto, ahora de este modo sí que me detecta que ha habido un error al borrar la entrada en la BD, pero quiero que me almacene el mensaje de error que me devuelve la BD.

Muchas gracias por vuestra paciencia y ayuda. Salu2!!
  #5 (permalink)  
Antiguo 06/06/2008, 12:50
Avatar de zempox  
Fecha de Ingreso: mayo-2007
Mensajes: 32
Antigüedad: 17 años
Puntos: 1
Respuesta: Java y Sentencia SQL...

Cuando "i" vale 0 es porque ha habido un error durante la ejecución de la sentencia SQL. Por tanto, intento filtrarlo, pero la línea del final que dice "descripcionError = e.getMessage();" me da error en "e", porque dice que puede no estar inicializado. ¿Qué puedo entonces hacer? Es que estoy iniciándome en Java, y aún no domino el TRY - CATCH.

Por cierto, ahora de este modo sí que me detecta que ha habido un error al borrar la entrada en la BD, pero quiero que me almacene el mensaje de error que me devuelve la BD.

Muchas gracias por vuestra paciencia y ayuda. Salu2!![/QUOTE]

public boolean realizarAccion2(String comandoSql)
{
Statement comando;
int i=-1;
//deberias declarar
//String descripcionError = "";
try {
comando = conexion.createStatement();
i = comando.executeUpdate(comandoSql);
comando.close();
}
catch(Exception e) {
descripcionError=e.getMessage();
//si aqui asignas el error a descripcionError ......

}

if(i != 0) {
descripcionError = "";
return(true);
}
else {
//aqui si ha habido un error dentro del bloque catch ya no debes recuperar el error de nuevo e. //ya esta fuera de contexto
//si quieres ver el error usa System.out.println(descripcionError)
// o si no pintalo con un JOptionPane.showMessageDialog(null, descripcionError);
descripcionError = e.getMessage(); /// esto ya no
return(false);
}

} // END_realizarAccion2

claro no esta inicializado, si te das cuenta "e" pertenece al bloque try/catch especificamente esta declarado "dentro del bloque catch" cuando sales del bloque intentas que e.getMessage() te devuelva un mensaje (mensaje que ya capturaste en el catch) y no lo va a hacer ya que es una variable fuera de ambito. mejor dicho esta fuera de contexto solo puedes usar e. cuando esta dentro del bloque catch despues no !!!! , deberia mostrar tambien un mensaje si se elimino correctamente el registro o si no se elimino nada......:D

otra cosa usa catch(SQLException e) en lugar de catch(Exception e) el primero te va a devolver el error ocurrido en el DBMS cualquiera sea el que uses mysql, sqlserver, etc etc

espero que te sirva ... saludos
  #6 (permalink)  
Antiguo 07/06/2008, 14:26
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: Java y Sentencia SQL...

Cita:
Iniciado por zempox Ver Mensaje
Cuando "i" vale 0 es porque ha habido un error durante la ejecución de la sentencia SQL...
Si i vale 0, no ocurrio ningun error en la ejecucion de la sentencia, simplemente no borró nada por que nada coincidia con las condiciones del DELETE. No es un error, y por tanto no genera ninguna Exception.

Si tu programa ha de considerar que eso es un error, pues tendras que lanzar tu la excepcion.

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 17/06/2008, 09:45
Isdiar
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Java y Sentencia SQL...

Zempox, muchas gracias por tu contestación. He entendido el por qué "Exception e" no funciona fuera del try/catch... JeJe Por otro lado, he modificado la obtención del mensaje de error y lo he puesto usando "System.out.println(descripcionError)", pero sigue sin almacenar nada.

Si consideramos el mensaje de GreenEyed (gracias por tu respuesta también), puede que sea que no ha habido error en la ejecución de la sentencia, pero aún así, debería de decirme que no existe "id2" en la BD, no? O cómo lo hago?

Muchas gracias por todo. Y perdonad que haya estado unos días sin contestar ni poder entrar, pues estuve resolviendo cosillas que tenía pendiente antes de seguir.

Un saludo!!
  #8 (permalink)  
Antiguo 17/06/2008, 10:24
Isdiar
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Java y Sentencia SQL...

Mi objetivo: que cuando haya un error en la BD, yo pueda almacenarlo en descripcionError.

¿Sabéis la manera más fácil de hacerlo? Gracias!
  #9 (permalink)  
Antiguo 17/06/2008, 12:37
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: Java y Sentencia SQL...

La cuestion es que SQL no considera un error que no se borre ninguna fila. Le has dicho que "borre todas las filas que cumplan esa condicion" y el lo ha hecho, simplemente. El que no haya ninguna que la cumpla es "tu" problema, desde su punto de vista, asi que tendras que tratarlo aparte.

¿Simplemente con comprobar si i vale 0 y poniendo descripcionError a "No se borró el registro por que no existía" no te serviría?

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #10 (permalink)  
Antiguo 17/06/2008, 16:46
Isdiar
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Java y Sentencia SQL...

Ok, cuando i==0, descripcionError="El registro no existe".

Y cuando i!=0, he usado System.out.println(descripcionError), está bien?

Gracias!
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 23:47.