Baza implementacja – SQLiteOpenHelper – #04

Zacznijmy standardowo i powoli. Na początek potrzebujemy czegoś małego żeby w ogóle zacząć. Tabelka Meals ma u mnie tylko jedną kolumnę, którą muszę obsłużyć samodzielnie, kolumna z ID obsłuży się automagicznie po tym jak ustawię ją jako Primary Key. Dobry kandydat 🙂

Po zapoznaniu się z tutorialem i przeszukaniem niezastąpionego stackOverflow wstępnie stworzyłam klasę CoNaObiadDbHelper, która rozszerza androidową klasę do obsługi bazy SQLite.

https://gist.github.com/jezinka/a6327919fe207316f447b456739b577f

Możemy w niej znaleźć nazwę bazy danych, tabelki, nazwy kolumn. Kilka query do tworzenia, czyszczenia (na początek dość przydatne 😉 ) i usuwania tabelki. Nadpisujemy metody z klasy bazowej: onCreate, onUpgrade, onDowngrade żeby wykonywały query, które podamy. To o czym musimy pamiętać w tym miejscu to to, że sami dbamy o zmianę struktury bazy (in|de)krementując stałą DATABASE_VERSION przed odpaleniem aplikacji.

Do metod, których potrzebuję na wejściu należy taka, która wypisze mi wszystkie posiłki, które mam zapisane w bazie. Do osiągnięcia tej metody użyję kursora i prostego query… prostego jak select * from table.

https://gist.github.com/jezinka/9c84bb599c9d8b9e65b3a4fa1543de35

Przyda nam się też metoda, która wstawia dane do tabelki:

https://gist.github.com/jezinka/7335618653e84b5c379af2f32cfb7d1d

Otwieramy bazę w trybie do zapisu. Tworzymy obiekt ContentValues, który jest bardziej rozbudowaną tablicą haszującą i SQLiteDatabase zadba o odpowiednich insertów.

Tej metody możemy użyć od razu wstawiając przykładowe potrawy prosto do tabelki:

https://gist.github.com/jezinka/8a935226ad171bcb3339df5b4617855f

Czyli teraz nasza główna klasa wzbogaciła się o odczyt z bazy i wygląda tak:

https://gist.github.com/jezinka/100656ea79e723d7fc634faff7796f39

Przy tworzeniu głównej aktywności tworzę bazę, czyszczę ją i inicjalizuję wartościami, które miałam w liście. Docelowo to czyszczenie i inicjalizacja pójdzie precz, ale na ten moment potrzebuję danych do wyświetlenia.

Póki co jest dobrze, ale za moment chcę stworzyć drugą tabelkę, w przyszłości trzecią. A w kodzie takie coś:  TABLE_NAME, COLUMN_NAME_NAME… Tak nie może zostać! Kolejnym krokiem jest zrefaktorowanie klasy CoNaObiadDbHelper tak żeby wyjąć z niej wszystko co dotyczy tabelki Meal i wstawić do osobnej klasy, tak żeby przy kolejnych modyfikacjach obszar zmian był jak najmniejszy.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.