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

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania

Modyfikowalne zbiory wyników

Modyfikowalne zbiory wyników


Na poprzednim slajdzie wspomniano, że wynik zapytania można modyfikować. Przypomnijcie sobie państwo dyskusję dotyczącą perspektyw. Ponieważ wynik zapytania jest relacją, to można go przetwarzać, w celu modyfikowania relacji bazowych. W JDBC 2.0 wprowadzono funkcjonalność pozwalającą na modyfikowanie wyniku zapytania dostępnego poprzez obiekt typu „ResultSet”. Wszystkie wymagania, co do warunków, które zapytanie perspektywy musi spełnić, aby perspektywa była modyfikowalna, odnoszą się również do zapytań, dla których zbiory wyników mają być modyfikowalne. Aby utworzony w wyniku wykonania zapytania obiekt typu „ResultSet” pozwalał na modyfikację danych, obiekt typu „Statement” musi być utworzony z parametrem „ResultSet.CONCUR_UPDATABLE” (patrz poprzedni slajd).

Przykład (1) pokazuje instrukcję tworzącą odpowiedni obiekt typu „Statement”. Przykład (2) pokazuje wykonanie zapytania, którego wyniki będziemy modyfikować. Kiedy wskaźnik jest ustawiony na krotce, którą chcemy zmodyfikować, należy użyć metod „updateXXX” (XXX oznacza typ wartości), analogicznych do metod „getXXX”, za pomocą których można modyfikować wartości w wyniku. Znajdują tutaj również zastosowanie sugestie dotyczące stosowania odpowiednich metod do odpowiednich typów ANSI SQL przedstawione przy okazji omawiania metod „getXXX”. Metody „updateXXX” posiadają dwa parametry: pierwszy określa który atrybut ma zostać zmodyfikowany (albo jego nazwa, albo numer), drugi określa nową wartość atrybutu. Kiedy pożądane zmiany zostaną wprowadzone, należy albo je zatwierdzić za pomocą metody „updateRow” interfejsu „ResultSet”, żeby zostały zapisane do bazy danych, albo wycofać za pomocą metody „cancelRowUpdates” interfejsu „ResultSet”. Przesunięcie wskaźnika na inną krotkę w zbiorze wynikowym również powoduje wycofanie zmian w krotce. Przeanalizujmy przykład (3). W przykładzie tym, wskaźnik przesuwany jest na ostatnią krotkę wyniku. Jest to krotka, którą będziemy modyfikować. Następnie za pomocą metody „updateString”, drugiemu atrybutowi relacji wynikowej (NAZWISKO) przypisywana jest stara wartość z dodanym na końcu łańcuchem „123”. Za pomocą metody „updateFloat” modyfikowany jest atrybut o nazwie PLACA_POD. Jego nową wartość obliczana jest jako 90% starej. Ostatecznie, zmiany są zatwierdzane za pomocą metody „updateRow”.

Aby wstawić nową krotkę do relacji wynikowej, należy przesunąć wskaźnik na specjalną, wirtualną krotkę, która jest wypełniona samymi wartościami NULL. Można to wykonać za pomocą metody „moveToInsertRow” interfejsu „ResultSet”. Następnie, za pomocą metod „updateXXX”, należy wypełnić wartości poszczególnych atrybutów. Należy pamiętać o podaniu przynajmniej wszystkich wartości obowiązkowych, gdyż jeżeli tego nie zrobimy, zostanie zgłoszony wyjątek „SQLException”. Kiedy wszystkie wartości zostaną wypełnione, krotkę można wstawić za pomocą metody „insertRow” interfejsu „ResultSet”. Metoda ta wstawia do bazy danych nową krotkę i przesuwa wskaźnik na nowy, wirtualny, wiersz do wstawiania krotek. Aby przywrócić położenie wskaźnika do pozycji, a której się znajdował przed aktywowaniem metody „moveToInsertRow”, należy użyć metody „moveToCurrentRow”. Rozważmy przykład (4). Przykład ten rozpoczyna się od przesunięcia wskaźnika do wirtualnej krotki. Następnie, za pomocą metod „updateXXX”, wstawiane są do kolejnych atrybutów odpowiednie wartości. Ostatecznie, krotka jest wstawiana do bazy danych za pomocą metody „insertRow”.

Usuwanie krotek jest bardzo proste. Wystarczy przesunąć wskaźnik na krotkę, którą chcemy usunąć, a następnie aktywować bezparametrową metodę „deleteRow” interfejsu „ResultSet”.



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


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