ZSBD-2st-1.2-lab6.tresc-1.3-Slajd13

Z Studia Informatyczne
Wersja z dnia 09:36, 10 sie 2006 autorstwa PKrzyzagorski (dyskusja | edycje)
(różn.) ← poprzednia wersja | przejdź do aktualnej wersji (różn.) | następna wersja → (różn.)
Przejdź do nawigacjiPrzejdź do wyszukiwania

Modyfikacja struktur w bazie danych

Modyfikacja struktur w bazie danych


Jak już wspominano wcześniej, modyfikacja obiektów zapisanych w bazie danych polega na wczytaniu ich do pamięci z bazy danych, modyfikacji i ponownym zapisie za pomocą metody set. W przypadku złożonych struktur danych należy również postępować według tego samego schematu. Problem zaczyna się w sytuacji, kiedy, modyfikacji było bardzo dużo. Wywoływanie metody set dla każdego zmodyfikowanego obiektu złożonej struktury danych byłoby bardzo uciążliwe, a implementacja zapisu modyfikacji mogłaby zająć czas, który raczej warto poświęcić na implementację logiki aplikacji. Metoda set zawiera mechanizm pozwalający na aktualizację całych struktur zmodyfikowanych w pamięci. Przy okazji omawiania zapisywania złożonych struktur do bazy danych wspomniano, że metoda set zapisując obiekt sprawdza, czy jego pola nie wskazują na niezapisane do bazy danych obiekty, i jeżeli tak jest to te obiekty są również zapisywane do bazy danych. A co jeśli pola zapisywanego obiektu wskazują na obiekty już zapisywane wcześniej w bazie danych, bądź referencja na taki obiekt zostanie przekazana jako parametr aktualny metody set? W takiej sytuacji zaczyna działać mechanizm podobny do używanego przy odczycie obiektów. Polega on na wykorzystaniu tzw. głębokości aktualizacji, to jest liczby powiązań referencyjnych, wzdłuż których nawiguje db4o w poszukiwaniu obiektów do aktualizacji. Domyślna głębokość aktualizacji wynosi 1, a zatem aktualizowany jest jedynie obiekt przekazany jako parametr metodzie set. Głębokość aktualizacji można ustalić zarówno globalnie, jak i dla każdej z klas z osobna, jak również wyłączyć sprawdzanie głębokości aktualizacji dla obiektów konkretnych klas, albo pól obiektów konkretnych klas. W zakres ćwiczeń wchodzi jedynie ustalanie globalnej głębokości aktywacji. Globalną głębokość aktualizacji można zmodyfikować za pomocą metody updateDepth interfejsu Configuration). Podobnie jak w przypadku głębokości aktywacji, ten parametr musi również zostać ustalony przed nawiązaniem połączenia z bazą danych.

Przykładowy program pokazany na slajdzie ustala globalną głębokość aktualizacji na bardzo wysoką wartość, co w praktyce oznacza, że wywołanie metody set spowoduje aktualizację wszystkich obiektów osiągalnych z obiektu na którego referencję podano jako parametr tej metody (1). Prócz tego, głębokość aktywacji jest również ustawiana na wysoką wartość w celu ułatwienia wczytywania rysunku z bazy danych. Następnie, rysunek jest odczytywany z bazy danych, a referencje na dwie figury z grupy pierwszej są zapisywane do zmiennych (2). Ostatecznie, wykonywana jest modyfikacja obiektów, które są następnie zapisywane do bazy danych za pomocą wywołania metody set na obiekcie reprezentującym cały rysunek (3). Ponieważ głębokość aktywacji jest wysoka, to wszelkie zmiany wprowadzone do obiektów składowych rysunku zostaną zapisane.


Kompletny kod programu, którego fragmenty pokazano na slajdzie załączono do kursu w postaci pliku: Skeleton-lab6.5.java



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