Partilhar via


Compreender as transações

Baixar driver JDBC

As transações são grupos de operações que são combinadas em unidades lógicas de trabalho. São usados para controlar e manter a consistência e integridade de cada ação numa transação, apesar dos erros que possam 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. Para mais informações sobre os níveis de isolamento suportados pelo driver JDBC, consulte Compreender os Níveis de Isolamento.

As aplicações devem controlar as transações usando Transact-SQL instruções ou os métodos fornecidos pelo driver JDBC, mas não ambos. Usar tanto as instruções Transact-SQL como os métodos da API JDBC na mesma transação pode levar a problemas, como uma transação não poder ser confirmada quando esperado, uma transação ser confirmada ou anulada e uma nova começar inesperadamente, ou exceções "Falha na retomada da transação".

Utilização de transações locais

Uma transação é considerada local quando é uma transação de fase única e é tratada diretamente pela base de dados. O driver JDBC suporta transações locais utilizando vários métodos da classe SQLServerConnection , incluindo setAutoCommit, commit e rollback. As transações locais são normalmente geridas explicitamente pela aplicação ou automaticamente pelo servidor de aplicações Java Platform, Enterprise Edition (Java EE).

O exemplo seguinte realiza uma transação local que consiste em duas instruções separadas no try bloco. As instruções são executadas contra a tabela Production.ScrapReason na base de dados de exemplo AdventureWorks2025, e são validadas na ausência de exceções. O código no catch bloco reverte a transação se for lançada uma exceção.

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();
        }
    }
}

Utilização de transações distribuídas

Uma transação distribuída atualiza os dados em duas ou mais bases de dados em rede, mantendo as importantes propriedades atómicas, consistentes, isoladas e duráveis (ACID) do processamento de transações. O suporte distribuído para transações foi adicionado à API JDBC na especificação da API Opcional JDBC 2.0. A gestão das transações distribuídas é normalmente realizada automaticamente pelo gestor de transações Java Transaction Service (JTS) num ambiente de servidor de aplicações Java EE. No entanto, o Microsoft JDBC Driver para SQL Server suporta transações distribuídas em qualquer gestor de transações compatível com Java Transaction API (JTA).

O driver JDBC integra-se perfeitamente com o Microsoft Distributed Transaction Coordinator (MS DTC) para fornecer verdadeiro suporte de transações distribuídas com SQL Server. O MSM DTC é uma funcionalidade de transações distribuídas fornecida pela Microsoft para sistemas Microsoft Windows. O MS DTC utiliza tecnologia comprovada de processamento de transações da Microsoft para dar suporte a funcionalidades XA, como o protocolo de commit distribuído bifásico completo e a recuperação de transações distribuídas.

Para mais informações sobre como usar transações distribuídas, consulte Compreender as transações XA.

Consulte também

Realização de transações com o driver JDBC