Salve a tutti,
Ho già formulato questa domanda ma in modo probabilmente impreciso e non ho avuto risposte. Provo a riformularla meglio.
L'interfaccia java.sql.Connection permette di eseguire più comandi sql in modo transazionale tramite il metodo setAutoCommit(boolean ac) impostando ac = false.
In effetti se in un blocco try-catch (obbigatorio per gestire l'eccezione sql) si eseguono più comandi sql e di seguito si esegue la rollback() ( ad esempio perchè una delle query ha interessato un numero di righe inaspettato) il risultato è, giustamente, l'annullamento di tutti i comandi eseguiti.
Il problema è che se uno dei comandi lancia un'eccezione sql (ad es. perchè una insert ritorna una chiave duplicata) e quindi si abbandona il blocca try per andare nel blocco catch, anche se qui si esegue la rollback() l'effetto voluto non c'è perchè i dati dei comandi sql precedenti a quello in errore si ritrovano in BD.
Ho verificato questo con due database: MySql e DB2; il comportamento è lo stesso.
Qualcuno ne sa qualcosa?
Grazie

Rispondi quotando