JDBC - Transações
Se sua conexão JDBC estiver no modo de confirmação automática, que é por padrão, todas as instruções SQL serão confirmadas no banco de dados após sua conclusão.
Isso pode ser bom para aplicativos simples, mas há três razões pelas quais você pode querer desligar o auto-commit e gerenciar suas próprias transações -
Para aumentar o desempenho.
Para manter a integridade dos processos de negócios.
Para usar transações distribuídas.
As transações permitem que você controle se, e quando, as alterações são aplicadas ao banco de dados. Ele trata uma única instrução SQL ou um grupo de instruções SQL como uma unidade lógica e, se alguma instrução falhar, toda a transação falhará.
Para habilitar o suporte de transação manual em vez do modo de auto-commit que o driver JDBC usa por padrão, use o objetosetAutoCommit()método. Se você passar um booleano falso para setAutoCommit (), você desativa o auto-commit. Você pode passar um verdadeiro booleano para ativá-lo novamente.
Por exemplo, se você tiver um objeto Connection chamado conn, codifique o seguinte para desligar a confirmação automática -
conn.setAutoCommit(false);
Commit & Rollback
Uma vez que você tenha concluído as suas alterações e deseja confirmá-las, ligue para commit() método no objeto de conexão da seguinte forma -
conn.commit( );
Caso contrário, para reverter atualizações para o banco de dados feitas usando a conexão chamada conn, use o seguinte código -
conn.rollback( );
O exemplo a seguir ilustra o uso de um objeto de confirmação 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();
}
Nesse caso, nenhuma das instruções INSERT acima teria sucesso e tudo seria revertido.
Para um melhor entendimento, vamos estudar o Código de Exemplo de Compromisso .
Usando Savepoints
A nova interface do JDBC 3.0 Savepoint fornece o controle transacional adicional. O SGBD mais moderno oferece suporte a pontos de salvamento em seus ambientes, como o PL / SQL da Oracle.
Ao definir um ponto de salvamento, você define um ponto de reversão lógico dentro de uma transação. Se ocorrer um erro depois de um ponto de salvamento, você pode usar o método rollback para desfazer todas as alterações ou apenas as alterações feitas após o ponto de salvamento.
O objeto Connection tem dois novos métodos que ajudam a gerenciar pontos de salvamento -
setSavepoint(String savepointName):Define um novo ponto de salvamento. Ele também retorna um objeto Savepoint.
releaseSavepoint(Savepoint savepointName):Exclui um ponto de salvamento. Observe que ele requer um objeto Savepoint como parâmetro. Este objeto é geralmente um ponto de salvamento gerado pelo método setSavepoint ().
Há um rollback (String savepointName) método, que reverte o trabalho para o ponto de salvamento especificado.
O exemplo a seguir ilustra o uso de um objeto 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);
}
Nesse caso, nenhuma das instruções INSERT acima teria sucesso e tudo seria revertido.
Para um melhor entendimento, vamos estudar os Savepoints - Exemplo de Código .