Descripción de las transacciones
Las transacciones son grupos de operaciones que se combinan en unidades lógicas de trabajo. Se usan para controlar y mantener la coherencia y la integridad de cada acción de una transacción, a pesar de los errores que puedan producirse en el sistema,
Con Microsoft JDBC Driver para SQL Server, las transacciones pueden ser locales o distribuidas. Las transacciones también pueden usar niveles de aislamiento. Para obtener más información acerca de los niveles de aislamiento compatibles con el controlador JDBC, vea Descripción de los niveles de aislamiento.
LAs aplicaciones deben controlar las transacciones usando las instrucciones Transact-SQ o los métodos proporcionados por el controlador JDBC, pero no ambos. Usar en la misma transacción las instrucciones Transact-SQL y los métodos API de JDBC podría producir problemas, como que una transacción no pueda ser confirmada cuando se espera, que la transacción sea confirmada o se revierta y se inicie una nueva inesperadamente, o las excepciones "No se pudo reanudar la transacción".
Usar transacciones locales
Se considera que una transacción es local cuando es de una sola fase y la base de datos la trata directamente. El controlador JDBC es compatible con las transacciones locales mediante el uso de varios métodos de la clase SQLServerConnection, incluidos setAutoCommit, commit y rollback. Las transacciones locales suelen ser administradas explícitamente por la aplicación o automáticamente por el servidor de aplicaciones de Java Platform, Enterprise Edition (Java EE).
El siguiente ejemplo realiza una transacción local que se compone de dos instrucciones separadas en el bloque try
. Las instrucciones se ejecutan en la tabla Production.ScrapReason de la base de datos de ejemplo AdventureWorks2022 y se confirman si no se inicia ninguna excepción. El código del bloque catch
revierte la transacción si se lanza una excepción.
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();
}
}
}
Usar transacciones distribuidas
Una transacción distribuida es una transacción que actualiza datos en dos o más bases de datos conectadas a una red manteniendo las propiedades atómicas, coherentes, aisladas y durables (ACID) del procesamiento de la transacción. La compatibilidad con las transacciones distribuidas se incluyó en la API de JDBC de la especificación API Opcional de JDBC 2.0. La administración de transacciones distribuidas normalmente se realiza de forma automática por parte del administrador de transacciones Servicio de Transacciones de Java (JTS) dentro de un entorno de servidor de aplicaciones Java EE. No obstante, Microsoft JDBC Driver para SQL Server es compatible con las transacciones distribuidas realizadas en cualquier administrador de transacciones compatible con la API de transacciones de Java (JTA).
El controlador JDBC se integra a la perfección con el Coordinador de transacciones distribuidas de Microsoft (MS DTC) para proporcionar una compatibilidad real con las transacciones distribuidas de SQL Server. MS DTC es una herramienta de transacciones distribuidas que proporciona Microsoft para sistemas Microsoft Windows. MS DTC usa tecnología probada de procesamiento de transacciones de Microsoft para proporcionar compatibilidad con características XA tales como el protocolo de confirmación distribuido de dos fases completo y la recuperación de transacciones distribuidas.
Para obtener más información sobre cómo usar las transacciones distribuidas, vea Descripción de las transacciones XA.