Partilhar via


Noções básicas sobre transações

Baixar Driver JDBC

Transações são grupos de operações que são combinadas em unidades lógicas de trabalho. Elas são usadas para controlar e manter a consistência e a integridade de cada ação em uma transação, apesar de erros que poderiam ocorrer no sistema.

Com o Microsoft JDBC Driver para SQL Server, as transações podem ser locais ou distribuídas. As transações também podem usar níveis de isolamento. Confira mais informações sobre os níveis de isolamento compatíveis no JDBC Driver em Noções básicas sobre níveis de isolamento.

Os aplicativos devem controlar transações usando instruções de Transact-SQL ou os métodos fornecidos pelo driver JDBC, mas não ambos. Usar as instruções de Transact-SQL e também os métodos de API do JDBC na mesma transação pode causar problemas, como uma transação não poder ser confirmada quando esperada, uma transação ser confirmada ou revertida e uma nova iniciar inesperadamente ou exceções de "Falha ao retomar a transação".

Como usar transações locais

Uma transação é considerada local quando é uma transação de fase única e é tratada diretamente pelo banco de dados. O driver JDBC oferece suporte a transações locais usando vários métodos da classe SQLServerConnection, incluindo setAutoCommit, commit e rollback. As transações locais normalmente são gerenciadas de forma explícita pelo aplicativo ou automaticamente pelo servidor de aplicativos da Plataforma Java, Enterprise Edition (Java EE).

O exemplo a seguir realiza uma transação local que consiste em duas instruções separadas no bloco try. As instruções são executadas em relação à tabela Production.ScrapReason no banco de dados de exemplo AdventureWorks2022 e elas são confirmadas se nenhuma exceção for gerada. O código no bloco catch reverterá a transação se uma exceção for lançada.

public static void executeTransaction(Connection con) {
    try {
        //Switch to manual transaction mode by setting
        //autocommit to false. Note that this starts the first 
        //manual transaction.
        con.setAutoCommit(false);
        Statement stmt = con.createStatement();
        stmt.executeUpdate("INSERT INTO Production.ScrapReason(Name) VALUES('Wrong size')");
        stmt.executeUpdate("INSERT INTO Production.ScrapReason(Name) VALUES('Wrong color')");
        con.commit(); //This commits the transaction and starts a new one.
        stmt.close(); //This turns off the transaction.
        System.out.println("Transaction succeeded. Both records were written to the database.");
    }
    catch (SQLException ex) {
        ex.printStackTrace();
        try {
            System.out.println("Transaction failed.");
            con.rollback();
        }
        catch (SQLException se) {
            se.printStackTrace();
        }
    }
}

Como usar transações distribuídas

Uma transação distribuída atualiza dados em dois ou mais bancos de dados em rede, mantendo as propriedades atômicas, consistentes, isoladas e duráveis (ACID) importantes do processamento de transações. O suporte a transações distribuídas foi acrescentado à API do JDBC na especificação da API opcional do JDBC 2.0. O gerenciamento de transações distribuídas normalmente é executado de forma automática pelo gerenciador de transações Java Transaction Service (JTS) em um ambiente de servidor de aplicativos Java EE. Porém, o Microsoft JDBC Driver para SQL Server oferece suporte a transações distribuídas em qualquer gerenciador de transações compatível com API de transação Java (JTA).

O driver JDBC integra-se perfeitamente com o MS DTC (Coordenador de Transações Distribuídas da Microsoft) para proporcionar um verdadeiro suporte de transação distribuída com o SQL Server. O MS DTC é um recurso de transação distribuída fornecido pela Microsoft para sistemas Microsoft Windows. O MS DTC usa a tecnologia de processamento de transações comprovada da Microsoft para oferecer suporte a recursos XA como, por exemplo, o protocolo completo de confirmação distribuída de duas fases e a recuperação de transações distribuídas.

Confira mais informações sobre como usar transações distribuídas em Noções básicas sobre transações XA.

Confira também

Executando transações com o JDBC Driver