Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Por defeito, um conjunto de resultados criado dentro de uma transação é mantido aberto após a transação ser confirmada na base de dados, ou quando é revertida. No entanto, por vezes é útil que o conjunto de resultados seja fechado depois de a transação ter sido completada. Para isso, o Microsoft JDBC Driver for SQL Server suporta a utilização da capacidade de manutenção do conjunto de resultados.
A holdability do conjunto de resultados pode ser definida usando o método setHoldability da classe SQLServerConnection . Ao definir a holdability usando o método setHoldability, as constantes de holdability do conjunto de resultados de ResultSet.HOLD_CURSORS_OVER_COMMIT ou ResultSet.CLOSE_CURSORS_AT_COMMIT podem ser usadas.
O driver JDBC também suporta definir a sustentabilidade ao criar um dos objetos Statement. Ao criar os objetos Statement que têm sobrecargas com parâmetros de holdability do conjunto de resultados, a holdability do objeto Statement deve corresponder à holdability da ligação. Quando não coincidem, é lançada uma exceção. Isto porque o SQL Server suporta a manutenção apenas ao nível da ligação.
A persistência de um conjunto de resultados é a persistência do objeto SQLServerConnection associado a este conjunto quando ele é criado, apenas para cursores no lado do servidor. Não se aplica a cursores do lado do cliente. Todos os conjuntos de resultados com cursores no lado do cliente terão sempre o valor de persistência de ResultSet.HOLD_CURSORS_OVER_COMMIT.
Para cursores de servidor, quando conectados ao SQL Server 2005 ou posterior, definir a persistência afeta apenas a persistência de novos conjuntos de resultados que ainda estão para ser criados nessa ligação. Significa que definir a retenção não tem impacto na retenção de quaisquer conjuntos de resultados que foram criados anteriormente e já estejam abertos nessa ligação.
No exemplo seguinte, a holdabilidade do conjunto de resultados é definida ao realizar uma transação local composta por duas instruções separadas no bloco try. As instruções são executadas contra a tabela Production.ScrapReason na base de dados de exemplo AdventureWorks2025. Primeiro, o exemplo muda para o modo de transação manual ao definir o auto-commit para false. Uma vez desativado o modo de auto-commit, nenhuma Declaração SQL será comprometida até que a aplicação chame explicitamente o método commit . O código no bloco de captura reverte a transação se for lançada uma exceção.
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();
}
}
}