BD-1st-2.4-lab10.tresc-1.1-Slajd28

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania

Przewijalne zbiory wyników

Przewijalne zbiory wyników


W JDBC 2.0 rozbudowano funkcjonalność obiektu typu „ResultSet” reprezentującego wynik zapytania. Dzięki nowej funkcjonalności możliwe jest przeglądanie zbioru wyników w dowolnej kolejności. Aby w wyniku zapytania tworzone były odpowiednie obiekty typu „ResultSet”, należy utworzyć obiekt typu „Statement”, za pomocą innej wersji metody „createStatement”. Inna wersja metody „createStatement”, przyjmuje dwa parametry, które są typu liczbowego, a konkretne wartości są reprezentowane przez odpowiednie stałe. Pierwszy parametr określa dopuszczalny sposób przeglądania wyników zapytania, a drugi określa czy zbiór wyników można modyfikować. Pierwszy parametr może przyjmować następujące wartości:

ResultSet.TYPE_SCROLL_FORWARD – stary rodzaj wyników zapytania, wyniki mogą być przeglądane jedynie sekwencyjnie, „do przodu”,

ResultSet.TYPE_SCROLL_INSENSITIVE – wyniki mogą być przeglądane w dowolny sposób, ale nie odzwierciedlają zmian wykonanych na relacjach, do których odnosi się zapytanie, wykonanych przez innych użytkowników,

ResultSet.TYPE_SCROLL_SENSITIVE – wyniki mogą być przeglądane w dowolny sposób i odzwierciedlają zmiany wykonane przez innych użytkowników.

Drugi parametr może przyjąć jedną z dwóch wartości:

ResultSet.CONCUR_READ_ONLY – zbioru wyników nie można modyfikować,

ResultSet.CONCUR_UPDATABLE – zbiór wyników można modyfikować.

Tematyka związana z modyfikowalnymi zbiorami wyników zostanie opisana później. Jeżeli chcemy korzystać z prekompilowanych poleceń i przewijalnych zbiorów wyników, to istnieje również rozbudowana wersja metody „prepareStatement”, której pierwszym parametrem jest łańcuch z poleceniem SQL (tak samo jak poprzednio), a kolejnymi dwoma parametrami są parametry identyczne z parametrami rozbudowanej wersji metody „createStatement”.

Kiedy zostanie utworzony obiekt typu „Statement”, można go użyć do wykonania w znany już sposób dowolnego zapytania. W wyniku zapytania otrzymujemy obiekt typu „ResultSet”, który posiada następujące metody pozwalające na poruszanie się po zbiorze wyników:

- „absolute(n)” – ustawia wskaźnik na n-tej krotce wyniku zapytania. Jeżeli n jest ujemne (-n), to pozycja wskaźnika jest liczona od końca zbioru wynikowego (n-ta krotka od końca),

- „relative(n)” – przesunięcie wskaźnika o n krotek względem aktualnej pozycji. Wartość n może być zarówno dodatnia (przesunięcie do przodu), jak i ujemna (cofnięcie się),

- „beforeFirst” – przesunięcie wskaźnika na pozycję przed pierwszą krotką,

- „afterLast” – przesunięcie wskaźnika na pozycję za ostatnią krotką,

- „first” – przesunięcie wskaźnika na pierwszą krotkę,

- „last” – przesunięcie wskaźnika na ostatnią krotkę,

- „next” – znane z poprzednich slajdów, przesuwa wskaźnik na następną krotkę i zwraca prawdę, jeśli nie znalazł się on za ostatnią krotką,

- „previous” – odwrotność „next”, przesuwa wskaźnik na poprzednią krotkę i zwraca prawdę, jeśli nie znalazł się on przed pierwszą krotką,

- „isAfterLast” – zwraca „true”, jeśli wskaźnik znajduje się za ostatnią krotką i „false” w przeciwnym wypadku,

- „isBeforeFirst” – zwraca „true”, jeśli wskaźnik znajduje się przed pierwszą krotką i „false” w przeciwnym wypadku,

- „isFirst” – zwraca „true” jeśli wskaźnik znajduje się na pierwszej krotce i „false” w przeciwnym wypadku,

- „isLast” – zwraca „true” jeśli wskaźnik znajduje się na ostatniej krotce i „false” w przeciwnym wypadku.

Rozważmy przykład na slajdzie. Na przykładzie (1) pokazano instrukcję tworzącą obiekt typu „Statement”, który pozwoli na otrzymywanie przewijalnych, ale nie modyfikowalnych wyników. Na przykładzie (2) pokazano wykonanie zapytania, a następnie wykorzystanie metod „absolute” i „relative” do odczytania krotek z relacji wynikowej. Pierwsze polecenie przesuwa wskaźnik na pierwszą krotkę relacji wynikowej. Następnie odczytywana jest wartość nazwiska z tej krotki i wypisywane na konsoli. Następnie, wskaźnik jest przesuwany na drugą od końca krotkę, potem na krotkę znajdującą się przed aktualnie wskazywaną i ostatecznie, na krotkę znajdującą się dwie pozycje za aktualnie wskazywaną. Przykład (3) demonstruje użycie metod „afterLast” i „previous”. Za pomocą „afterLast” wskaźnik przesuwany jest na pozycję za ostatnią krotką. Następnie, w pętli „while”, analogicznej do używanych na poprzednich slajdach, odczytywane są wszystkie nazwiska z relacji. Jedyną różnicą pomiędzy tą, a poprzednimi pętlami jest to, że użyto metody „previous”, która jest odpowiednikiem metody „next”, ale poruszającym się „do tyłu”.


Pełny kod programu, którego fragmenty przedstawiono na slajdzie, załączono do kursu w pliku JDBCELearning9.java.


<< Poprzedni slajd | Spis treści | Następny slajd >>