Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Ve výchozím nastavení je sada výsledků vytvořená v rámci transakce otevřena po potvrzení transakce do databáze nebo při vrácení zpět. Někdy je však užitečné, že po potvrzení transakce je sada výsledků uzavřena. Za tímto účelem podporuje ovladač Microsoft JDBC pro SQL Server použití setrvalosti sady výsledků.
Nastavení uchování sady výsledků lze nastavit pomocí setHoldability metoda SQLServerConnection třídy. Při nastavení možnosti uchování pomocí metody setHoldability lze použít konstanty uchování sady výsledků ResultSet.HOLD_CURSORS_OVER_COMMIT nebo ResultSet.CLOSE_CURSORS_AT_COMMIT.
Ovladač JDBC také podporuje nastavení uchování při vytváření jednoho z objektů Statement. Při vytváření objektů Statement, které mají přetížení s parametry udržitelnosti result setu, musí být udržitelnost objektu statement shodná s udržitelností připojení. Když se neshodují, vyvolá se výjimka. Je to proto, že SQL Server podporuje uchování pouze na úrovni připojení.
Uchování sady výsledků je uchování objektu SQLServerConnection, který je přidružen k sadě výsledků v době, kdy je sada výsledků vytvořena pouze pro kurzory na straně serveru. Nevztahuje se na kurzory na straně klienta. Všechny sady výsledků s kurzory na straně klienta budou mít vždy hodnotu ResultSet.HOLD_CURSORS_OVER_COMMITuchování.
U kurzorů serveru platí, že při připojení k SQL Serveru 2005 nebo novějšímu má nastavení možnosti uchování vliv pouze na možnosti uchování nových sad výsledků, které se ještě v daném připojení vytvoří. To znamená, že nastavení blokování nemá žádný vliv na blokování žádné sady výsledků, které byly vytvořeny dříve a jsou již v daném připojení otevřené.
V následujícím příkladu je udržitelnost sady výsledků nastavena při provádění místní transakce, která se skládá ze dvou samostatných příkazů v bloku try. Příkazy se spouští v tabulce Production.ScrapReason v ukázkové databázi AdventureWorks2025. Nejprve příklad přepne do režimu ruční transakce nastavením automatického potvrzení na false. Jakmile je režim automatického potvrzení zakázán, nebudou potvrzeny žádné příkazy SQL, dokud aplikace nevolá metodu commit explicitně. Kód v bloku catch zvrátí transakci, pokud je vyvolána výjimka.
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();
}
}
}