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.
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 EXCEL_VENDITA_SKILLCARD WHERE SESSIONID='"+ idSess+"'"; java.sql.Statement stmt111 = conn.createStatement(); java.sql.ResultSet rsX1 = stmt111.executeQuery(sql121); } catch(SQLException e3)//catch del 3°try { out.println("Si è verificato un errore durante l'esecuzione); 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 }

Rispondi quotando