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

capturar excepcion

Estas en el tema de capturar excepcion en el foro de Java en Foros del Web. hola, tengo una clase java que lo que hace es ejecutar unas sentencias sql que estan almacenadas en un fichero. si una de las sentencias ...
  #1 (permalink)  
Antiguo 06/09/2005, 04:53
 
Fecha de Ingreso: mayo-2005
Mensajes: 294
Antigüedad: 19 años
Puntos: 0
capturar excepcion

hola, tengo una clase java que lo que hace es ejecutar unas sentencias sql que estan almacenadas en un fichero. si una de las sentencias es un drop table de una tabla que no existe quiero que la clase la ignore y siga ejecutando la clase no se si me entendeis. El caso es que yo capturo la excepcion y digo que no haga nada, aun así la ejecucion de la clase se para y no continua leyendo el fichero, Os pongo el codigo a ver si me podeis decir lo que hago mal ok? fijaros sobre todo en el catch que supongo que es donde tendre el error. Muchas gracias!

public int EjecutarFichero(String usuario, String password,
String identificador) {
GestorDeConexiones gdc = new GestorDeConexiones();
java.io.FileOutputStream fichero = null;
FileInputStream ficheroEntrada = null;
byte[] buffer = new byte[1024];
//me creo el fichero donde almacenare la informacion a ejecutar
String path = "C:/scriptCreaBd.txt";
File f = new File(path);
try {
fichero = new FileOutputStream(f);
}
catch (FileNotFoundException fe) {
fe.printStackTrace();
return -1;
}

//relleno ese fichero con la informacion que me interesa
try {
Connection con = gdc.ConexionServauto("system", "sara_system");
String query1 = "SELECT SCRIPT FROM ESQ_BD WHERE identificador='" +
identificador + "'";
PreparedStatement ps = con.prepareStatement(query1);
ResultSet rs = ps.executeQuery();
if (rs.next()) {
int size;
java.io.InputStream is = (rs.getClob(1)).getAsciiStream();
while ( (size = is.read(buffer)) != -1) {
fichero.write(buffer, 0, size);
fichero.flush();
}
con.close();
con = gdc.ConexionAlumno(usuario, password);
Statement stm = con.createStatement();
ficheroEntrada = new FileInputStream(f);
String scriptf = "";
while ( (size = ficheroEntrada.read(buffer)) != -1) {
String script = new String(buffer, 0, size);
scriptf = scriptf + script;
}
StringTokenizer str = new StringTokenizer(scriptf, ";");
while (str.hasMoreTokens()) {
String batch = str.nextToken();
stm.addBatch(batch);
}
stm.executeBatch();
f.delete();
return 0;

}
else {
return -1;
}

}
catch (Exception ex) {
if(ex.getMessage().equalsIgnoreCase("ORA-00942"))
{}
return -1;
}

}
  #2 (permalink)  
Antiguo 06/09/2005, 07:42
 
Fecha de Ingreso: septiembre-2004
Mensajes: 191
Antigüedad: 19 años, 7 meses
Puntos: 1
quizas deberias capturar por cada sentencia SQL lanzada en vez de capturar por el bloke completo. Y en el catch, si se cumple la igualdad del error q kieres ignorar q no haga nada, y si es otro error salir de la funcion

saludos :)
  #3 (permalink)  
Antiguo 06/09/2005, 08:15
Avatar de HenrydeSousa  
Fecha de Ingreso: septiembre-2004
Ubicación: Venezuela
Mensajes: 300
Antigüedad: 19 años, 7 meses
Puntos: 2
Sólo una humilde opinión. Pienso que también podrías validar la existencia de la tabla a eliminar en tu sentencia sql.
Por ejemplo de esta forma:
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[tutabla]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[tutabla]
GO
Haciéndolo así, te asegurarías de no obtener un error al intentar eliminar una tabla que no existe.
Eso es para Sql Server, en tu caso lo adaptarías al motor de base de datos que estés usando.
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 23:27.