Udostępnij przez


Korzystanie z możliwości przechowywania

pobierz sterownik JDBC

Domyślnie zestaw wyników utworzony w ramach transakcji pozostaje otwarty zarówno po zatwierdzeniu transakcji do bazy danych, jak i przy jej wycofaniu. Jednak czasami przydatne jest zamknięcie zestawu wyników po zatwierdzeniu transakcji. W tym celu sterownik JDBC firmy Microsoft dla programu SQL Server obsługuje możliwość przechowywania zestawu wyników.

Możliwość przechowywania zestawu wyników można ustawić przy użyciu metody setHoldability klasy SQLServerConnection . Podczas ustawiania utrzymalności przy użyciu metody setHoldability można użyć stałości ResultSet.HOLD_CURSORS_OVER_COMMIT lub ResultSet.CLOSE_CURSORS_AT_COMMIT dla utrzymalności zbioru wyników.

Sterownik JDBC obsługuje również ustawianie parametrów przechowywania podczas tworzenia jednego z obiektów typu Statement. Podczas tworzenia obiektów instrukcji, które mają przeciążenia z parametrami holdability zestawu wyników, możliwość przechowywania obiektu instrukcji musi być zgodna z możliwością przechowywania połączenia. Gdy nie są one zgodne, zgłaszany jest wyjątek. Jest to spowodowane tym, że program SQL Server obsługuje możliwość przechowywania tylko na poziomie połączenia.

Możliwość przechowywania zestawu wyników to możliwość przechowywania obiektu SQLServerConnection skojarzonego z zestawem wyników w momencie utworzenia zestawu wyników tylko dla kursorów po stronie serwera. Nie ma zastosowania do kursorów po stronie klienta. Wszystkie zestawy wyników z kursorami po stronie klienta zawsze będą miały wartość trwałości ResultSet.HOLD_CURSORS_OVER_COMMIT.

W przypadku kursorów serwera, w przypadku połączenia z programem SQL Server 2005 lub nowszym ustawienie możliwości przechowywania wpływa tylko na możliwość przechowywania nowych zestawów wyników, które nie zostały jeszcze utworzone w tym połączeniu. Oznacza to, że ustawienie możliwości przechowywania nie ma wpływu na możliwość przechowywania zestawów wyników, które zostały wcześniej utworzone i są już otwarte na tym połączeniu.

W poniższym przykładzie, utrzymywanie zestawu wyników jest ustawiane podczas wykonywania transakcji lokalnej składającej się z dwóch oddzielnych instrukcji w bloku try. Polecenia są wykonywane względem tabeli Production.ScrapReason w przykładowej bazie danych AdventureWorks2025. Najpierw przykład przełącza się do trybu transakcji ręcznej, ustawiając auto-commit na false. Po wyłączeniu trybu automatycznego zatwierdzania żadne instrukcje SQL nie zostaną zatwierdzone, dopóki aplikacja jawnie wywoła metodę zatwierdzania . Kod w bloku catch cofa transakcję, jeśli zostanie zgłoszony wyjątek.

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

Zobacz także

Wykonywanie transakcji za pomocą sterownika JDBC