JDBC - Transazioni
Se la connessione JDBC è in modalità di commit automatico , che è per impostazione predefinita, ogni istruzione SQL viene salvata nel database al suo completamento.
Potrebbe andare bene per applicazioni semplici, ma ci sono tre motivi per cui potresti voler disattivare il commit automatico e gestire le tue transazioni:
Per aumentare le prestazioni.
Per mantenere l'integrità dei processi aziendali.
Per utilizzare transazioni distribuite.
Le transazioni consentono di controllare se e quando le modifiche vengono applicate al database. Tratta una singola istruzione SQL o un gruppo di istruzioni SQL come un'unità logica e, se un'istruzione fallisce, l'intera transazione fallisce.
Per abilitare il supporto delle transazioni manuali invece della modalità di commit automatico che il driver JDBC utilizza per impostazione predefinita, utilizzare l'oggetto ConnectionsetAutoCommit()metodo. Se si passa un valore booleano false a setAutoCommit (), si disattiva il commit automatico. Puoi passare un valore booleano true per riattivarlo.
Ad esempio, se si dispone di un oggetto Connection denominato conn, codificare quanto segue per disattivare il commit automatico:
conn.setAutoCommit(false);
Commit & Rollback
Una volta che hai finito con le modifiche e desideri confermare le modifiche, chiama commit() metodo sull'oggetto connessione come segue:
conn.commit( );
In caso contrario, per ripristinare gli aggiornamenti al database effettuati utilizzando la connessione denominata conn, utilizzare il codice seguente:
conn.rollback( );
L'esempio seguente illustra l'uso di un oggetto commit e rollback:
try{
//Assume a valid connection object conn
conn.setAutoCommit(false);
Statement stmt = conn.createStatement();
String SQL = "INSERT INTO Employees " +
"VALUES (106, 20, 'Rita', 'Tez')";
stmt.executeUpdate(SQL);
//Submit a malformed SQL statement that breaks
String SQL = "INSERTED IN Employees " +
"VALUES (107, 22, 'Sita', 'Singh')";
stmt.executeUpdate(SQL);
// If there is no error.
conn.commit();
}catch(SQLException se){
// If there is any error.
conn.rollback();
}
In questo caso, nessuna delle precedenti istruzioni INSERT avrà esito positivo e verrà eseguito il rollback di tutto.
Per una migliore comprensione, studiamo il Commit - Codice di esempio .
Utilizzo dei punti di salvataggio
La nuova interfaccia Savepoint JDBC 3.0 offre il controllo transazionale aggiuntivo. La maggior parte dei moderni DBMS, supporta i punti di salvataggio all'interno dei loro ambienti come PL / SQL di Oracle.
Quando si imposta un punto di salvataggio, si definisce un punto logico di rollback all'interno di una transazione. Se si verifica un errore dopo un punto di salvataggio, è possibile utilizzare il metodo rollback per annullare tutte le modifiche o solo le modifiche apportate dopo il punto di salvataggio.
L'oggetto Connection ha due nuovi metodi che consentono di gestire i punti di salvataggio:
setSavepoint(String savepointName):Definisce un nuovo punto di salvataggio. Restituisce anche un oggetto Savepoint.
releaseSavepoint(Savepoint savepointName):Elimina un punto di salvataggio. Si noti che richiede un oggetto Savepoint come parametro. Questo oggetto è solitamente un punto di salvataggio generato dal metodo setSavepoint ().
C'è uno rollback (String savepointName) , che riporta il lavoro al punto di salvataggio specificato.
Il seguente esempio illustra l'uso di un oggetto Savepoint:
try{
//Assume a valid connection object conn
conn.setAutoCommit(false);
Statement stmt = conn.createStatement();
//set a Savepoint
Savepoint savepoint1 = conn.setSavepoint("Savepoint1");
String SQL = "INSERT INTO Employees " +
"VALUES (106, 20, 'Rita', 'Tez')";
stmt.executeUpdate(SQL);
//Submit a malformed SQL statement that breaks
String SQL = "INSERTED IN Employees " +
"VALUES (107, 22, 'Sita', 'Tez')";
stmt.executeUpdate(SQL);
// If there is no error, commit the changes.
conn.commit();
}catch(SQLException se){
// If there is any error.
conn.rollback(savepoint1);
}
In questo caso, nessuna delle precedenti istruzioni INSERT avrà esito positivo e verrà eseguito il rollback di tutto.
Per una migliore comprensione, studiamo i punti di salvataggio - Codice di esempio .