|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Dec 2003
Messaggi: 458
|
uso di try&catch in una pagina jsp che esegue una stored procedure
Ho una pagina jsp che svolge questi punti:
1-si connette ad un db oracle 2-svolge una stored procedure senza committare 3-fa un controllo degli errori della procedura(con una select su una tabella relativa agli errori) 4-se è tutto ok fa il commit altrimenti il rollback 5-elimina(in ogni caso) da una tabella temporanea dei dati Metto qui sotto la pagina per farvi vedere come ho gestito le eccezioni. La mia richiesta(preghiera):Se qualcuno mi dice se +o- è corretto e in cosa ho sbagliato(non penso ci siano errori ma mi interessa un parere su come ho usato il try&catch). Ho visto che in jsp si puo' mettere una pagina di errore unica(usando page errorPage = "PaginaErrore.jsp") senza dover gestire le eccezioni nel codice: quando è utile?? grazie mille esempio.jsp: Codice:
Connection conn = null;
try //1°try,in modo che se la connessione salta vado subito al catch relativo e chiudo
{
conn = DriverManager.getConnection
("jdbc:oracle:ZZZZZZZ");
try //2°try, relativo alla procedura sql
{
conn.setAutoCommit(false);
//faccio partire la procedura sql
String s="begin commit; end;";
java.sql.Statement stmt2= conn.createStatement();
stmt2.execute(s);
s="begin excel.carica_skillcard('"+idSessione+"',"+ idT +"); end;";
java.sql.Statement stmt1 = conn.createStatement();
stmt1.execute(s);
//Controllo l'esistenza di errori nella procedura con una select da una tabella errori
//In caso non ci siano errori eseguo il commit
if(errori==0)
{
s="begin commit; end;";
java.sql.Statement stmt221= conn.createStatement();
stmt221.execute(s);
}
//In caso di errori eseguo il rollback
else
{
java.sql.Statement stmt3= conn.createStatement();
stmt3.execute(s);
}
}
//In caso sia accaduto qualche intoppo eseguo comunque un rollback tramite il catche che segue
catch(SQLException e2) //catch del 2°try
{
String s2="begin rollback; end;";
java.sql.Statement stmtX= conn.createStatement();
stmtX.execute(s2);
out.println("Si è verificato un errore durante l'esecuzione);
System.out.println(e2.getMessage());
}
//elimino da una tabella temporanea dei dati(operazione che devo fare cmq, anche se non è andato a buon fine la procedura, per questo messa in un altro try(il 3*)
try //3*try
{
String sql121 = "DELETE FROM EXL_VENDITA WHERE SESSIONID='"+ idSess+"'";
java.sql.Statement stmt111 = conn.createStatement();
java.sql.ResultSet rsX1 = stmt111.executeQuery(sql121);
}
catch(SQLException e3)//catch del 3°try
{ System.out.println(e3.getMessage());
}
}
catch(SQLException e1)//catch del 1°try
{
out.println("Si è verificato un errore durante l'esecuzione);
System.out.println(e1.getMessage());
}
finally//finally del 1°try che chiude cmq le connessioni
{
//chiusura connessioni
}
Ultima modifica di prazision : 21-07-2004 alle 23:16. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Dec 2003
Messaggi: 458
|
forse quello che è compreso nel terzo try andrebbe eseguito in unaltra pagina a cui si arriva con un redirect(visto che è totalmente slegato dal resto) e in questa fare un unico try e catch comprendente anche la connessione.
in tal maniera eviterei di nidificare |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 20:52.



















