Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
De forma predeterminada, un conjunto de resultados creado dentro de una transacción se mantiene abierto después de que la transacción se confirme en la base de datos o se revierta. No obstante, en ocasiones resulta útil que el conjunto de resultados se cierre después de que se haya confirmado la transacción. Para ello, el controlador Microsoft JDBC para SQL Server admite el uso de la persistencia de los conjuntos de resultados.
La capacidad de alojamiento de conjuntos de resultados se puede configurar con el método setHoldability de la clase SQLServerConnection. Al establecer la capacidad de retención mediante el método setHoldability, se pueden usar las constantes de capacidad de retención del conjunto de resultados ResultSet.HOLD_CURSORS_OVER_COMMIT o ResultSet.CLOSE_CURSORS_AT_COMMIT.
El controlador JDBC también es compatible con la configuración de la capacidad de alojamiento cuando se crea uno de los objetos Statement. Al crear los objetos Statement que tengan sobrecargas con los parámetros de la capacidad de alojamiento de los conjuntos de resultados, la capacidad de alojamiento del objeto de instrucción debe coincidir con la capacidad de alojamiento de la sobrecarga. Cuando no coinciden, se genera una excepción. Esto se debe a que SQL Server solo admite la persistencia a nivel de conexión.
La capacidad de permanencia de un conjunto de resultados es la capacidad de permanencia del objeto SQLServerConnection asociado a dicho conjunto de resultados en el momento de su creación, solo en el caso de los cursores del lado del servidor. Esto no se aplica a los cursores del lado cliente. Todos los conjuntos de resultados con cursores del lado del cliente tendrán siempre el valor de retención de ResultSet.HOLD_CURSORS_OVER_COMMIT.
Para los cursores de servidor, cuando están conectados a SQL Server 2005 o versiones posteriores, la configuración de la capacidad de alojamiento solamente afecta a la de los nuevos conjuntos de resultados que todavía han de ser creados en esa conexión. Eso significa que la configuración de la capacidad de alojamiento no afecta a la capacidad de alojamiento de los conjuntos de resultados creados previamente que ya estaban abiertos en esa conexión.
En el siguiente ejemplo, se establece la persistencia del conjunto de resultados al realizar una transacción local que consta de dos sentencias independientes en el bloque try. Las instrucciones se ejecutan en la tabla Production.ScrapReason de la base de datos de ejemplo AdventureWorks2025. Primero, el ejemplo cambia al modo de transacción manual configurando la confirmación automática en false. Una vez que el modo de confirmación automática está deshabilitado, no se confirman instrucciones SQL hasta que la aplicación llama explícitamente al método commit. El código del bloque catch revierte la transacción si se lanza una excepción.
public static void executeTransaction(Connection con) {
try (Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);) {
con.setAutoCommit(false);
con.setHoldability(ResultSet.HOLD_CURSORS_OVER_COMMIT);
stmt.executeUpdate("INSERT INTO Production.ScrapReason(Name) VALUES('Bad part')");
ResultSet rs = stmt.executeQuery("SELECT * FROM Production.ScrapReason");
con.commit();
System.out.println("Transaction succeeded.");
// Display results.
while (rs.next()) {
System.out.println(rs.getString(2));
}
}
catch (SQLException ex) {
ex.printStackTrace();
try {
System.out.println("Transaction failed.");
con.rollback();
}
catch (SQLException se) {
se.printStackTrace();
}
}
}