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

Transações JDBC

Se a conexão JDBC estiver no modo de submissão automática (padrão é submissão automática), cada instrução SQL será submetida ao banco de dados ao completar. Isso pode ser bom para aplicações simples, mas por três razões, você pode querer desativar a submissão automática e gerenciar suas próprias transações-

  • Para melhorar o desempenho.

  • Manter a integridade do processo de negócios.

  • 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 considera uma única instrução SQL ou um grupo de instruções SQL como um único bloco lógico, e se qualquer instrução falhar, toda a transação falhará.

Para ativar o suporte a transações manuais em vez do padrão do driver JDBCCommit automáticoPadrão, use o métodosetAutoCommit()Método. Se você passar o valor booleano false para setAutoCommit( ), ele desativará a função de commit automático. Você pode passar o valor booleano true para reativá-lo.

Por exemplo, se você tiver um objeto Connection chamado conn, escreva o seguinte código para desativar o commit automático-

conn.setAutoCommit(false);

Commit e rollback

Após concluir as alterações e desejar confirmar as alterações, por favorChame o método na conexão do objetocommit(), conforme mostrado a seguir:

conn.commit( );

Caso contrário, para desfazer as atualizações no banco de dados usando o Connection chamado conn, use o seguinte código-

conn.rollback( );

O exemplo a seguir ilustra o uso dos objetos de commit e rollback-

try{
   //Suponha um objeto de conexão válido conn
   conn.setAutoCommit(false);
   Statement stmt = conn.createStatement();
   
   String SQL = "INSERT INTO Employees" +
                "VALUES (106, 20, 'Rita', 'Tez')";
   stmt.executeUpdate(SQL);  
   //Submeta uma instrução SQL com formato incorreto, que interromperá
   String SQL = "INSERTED IN Employees" +
                "VALUES (107, 22, 'Sita', 'Singh')";
   stmt.executeUpdate(SQL);
   // Se não houver erro.
   conn.commit();
catch(SQLException se){
   // Se houver algum erro.
   conn.rollback();
}

Neste caso, as instruções INSERT acima não terão sucesso e todos os conteúdos serão revertidos.

Para entender melhor, vamos estudar “commit exemplo código.

Usar Savepoint

Nova JDBC 3.0 A interface Savepoint oferece outros controles de transação. A maioria dos DBMS modernos suporta pontos de salvamento em seu ambiente, por exemplo, o PL do Oracle. / SQL.

Ao definir um ponto de salvamento, você pode definir um ponto de rollback lógico na transação. Se ocorrer um erro após o ponto de salvamento, você pode usar o método de rollback para desfazer todas as alterações, ou apenas desfazer as alterações feitas após o ponto de salvamento.

O objeto Connection possui dois novos métodos que ajudam você a gerenciar pontos de salvamento-

  • setSavepoint(String savepointName):Defina um novo ponto de salvamento. Ele também retorna um objeto Savepoint.

  • releaseSavepoint(Savepoint savepointName):Exclua o ponto de salvamento. Por favor, note que ele precisa de um objeto Savepoint como parâmetro. Este objeto geralmente é gerado pelo método setSavepoint().

rollback (String savepointName)O método pode reverter o trabalho para um ponto de salvamento especificado.

O seguinte exemplo ilustra o uso do objeto Savepoint-

try{
   //Suponha um objeto de conexão válido conn
   conn.setAutoCommit(false);
   Statement stmt = conn.createStatement();
   
   //Definir um ponto de salvamento
   Savepoint savepoint1 = conn.setSavepoint("Savepoint1);
   String SQL = "INSERT INTO Employees" +
                "VALUES (106, 20, 'Rita', 'Tez')";
   stmt.executeUpdate(SQL);  
   //Submeta uma instrução SQL com formato incorreto, que interromperá
   String SQL = "INSERTED IN Employees" +
                "VALUES (107, 22, 'Sita', 'Tez')";
   stmt.executeUpdate(SQL);
   // Se não houver erro, por favor, submeta as alterações.
   conn.commit();
catch(SQLException se){
   // Se houver algum erro.
   conn.rollback(savepoint1);
}

Neste caso, as instruções INSERT acima não terão sucesso e todos os conteúdos serão revertidos.

Para entender melhor, vamos estudarPontos de salvamento-Código de exemplo.