English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

JDBC 事务

Se la connessione JDBC è in modalità di commit automatico (di default è in modalità di commit automatico), ogni istruzione SQL viene inviata al database al completamento. Questo può essere utile per applicazioni semplici, ma per tre motivi principali, potresti voler disabilitare il commit automatico e gestire le tue transazioni-

  • Per migliorare le prestazioni.

  • Mantieni l'integrità del processo aziendale.

  • Usa transazioni distribuite.

Le transazioni ti permettono di controllare se e quando applicare le modifiche al database. Vede un singolo SQL statement o un gruppo di SQL statements come un'unità logica, se una qualsiasi delle statement fallisce, l'intera transazione fallisce.

Per abilitare il supporto transazionale manuale invece dell'autocommit predefinito utilizzato dal driver JDBC-AutocommitModelli, utilizzare il metodo Connection oggettosetAutoCommit()Metodo. Se si passa il valore booleano false a setAutoCommit( ), viene disabilitata la funzione di autocommit. Puoi passare il valore booleano true per riaprire nuovamente.

Ad esempio, se hai un oggetto Connection chiamato conn, scrivi il seguente codice per disabilitare l'autocommit-

conn.setAutoCommit(false);

Commit e rollback

Completare le modifiche e desiderare di applicare le modifiche, quindiChiamare il metodo sulla connessione oggettocommit(), come segue:

conn.commit( );

Altrimenti, per annullare l'aggiornamento del database utilizzando la connessione conn, utilizzare il seguente codice-

conn.rollback( );

Esempio che illustra l'uso degli oggetti di commit e rollback-

try{
   //假设一个有效的连接对象conn
   conn.setAutoCommit(false);
   Statement stmt = conn.createStatement();
   
   String SQL = "INSERT INTO Employees " +
                "VALUES (106, 20, 'Rita', 'Tez')";
   stmt.executeUpdate(SQL);  
   //提交格式错误的SQL语句,该语句会中断
   String SQL = "INSERTED IN Employees " +
                "VALUES (107, 22, 'Sita', 'Singh')";
   stmt.executeUpdate(SQL);
   // Nessun errore.
   conn.commit();
}catch(SQLException se){
   // 如果有任何错误。
   conn.rollback();
}

在这种情况下,上面的INSERT语句都不会成功,并且所有内容都会回滚。

Per capire meglio, esaminiamo "Esempio di codice di commit

Usa Savepoint

L'interfaccia Savepoint del nuovo JDBC 3.0 ti offre altri controlli transazionali. La maggior parte dei moderni DBMS supportano i punti di salvataggio nel loro ambiente, ad esempio Oracle PL / SQL.

Quando si imposta un punto di salvataggio, puoi definire un punto di rollback logico nella transazione. Se si verifica un errore dopo il punto di salvataggio, puoi annullare tutte le modifiche utilizzando il metodo di rollback, o annullare solo le modifiche effettuate dopo il punto di salvataggio.

L'oggetto Connection ha due nuovi metodi che ti aiutano a gestire i punti di salvataggio-

  • setSavepoint(String savepointName):Definisci un nuovo punto di salvataggio. Restituisce anche un oggetto Savepoint.

  • releaseSavepoint(Savepoint savepointName):Elimina il punto di salvataggio. Si prega di notare che richiede un oggetto Savepoint come parametro. Questo oggetto è solitamente generato dal metodo setSavepoint().

rollback (String savepointName)方法可以将工作回滚到指定的保存点。

以下示例说明了Savepoint对象的用法-

try{
   //假设一个有效的连接对象conn
   conn.setAutoCommit(false);
   Statement stmt = conn.createStatement();
   
   //设置一个保存点
   Savepoint savepoint1 = conn.setSavepoint("Savepoint1");
   String SQL = "INSERT INTO Employees " +
                "VALUES (106, 20, 'Rita', 'Tez')";
   stmt.executeUpdate(SQL);  
   //提交格式错误的SQL语句,该语句会中断
   String SQL = "INSERTED IN Employees " +
                "VALUES (107, 22, 'Sita', 'Tez')";
   stmt.executeUpdate(SQL);
   // 如果没有错误,请提交更改。
   conn.commit();
}catch(SQLException se){
   // 如果有任何错误。
   conn.rollback(savepoint1);
}

在这种情况下,上面的INSERT语句都不会成功,并且所有内容都会回滚。

为了更好地理解,让我们研究Savepoints-示例代码