niedziela, 25 kwietnia 2010

Android a baza danych cz. 1

Wypełanie bazy danych za pomocą SQL
Bardzo przydatną klasą do obsługi bazy danych w Androidzie jest SQLiteOpenHelper, szczególnie przy jej tworzeniu oraz uaktualnianiu. Przy każdym otwarciu jest sprawdzana wersja bazy danych, a jeżeli nie jest utworzona to wywoływana jest metoda onCreate(SQLiteDatabase db), w tym miejscu należy zaimplementować sposób tworzenia bazy.
Na przykład można wykonać SQL tworzący tabele oraz wczytać dane do wypełnienia bazy z pliku data.sql wrzuconego do raw w postaci wielu insertów. Czyli coś w ten deseń:

@Override
public void onCreate(SQLiteDatabase db) {
    Log.d(TAG, "Tworzenie bazy danych");

    db.execSQL(DATABASE_CREATE);
    InputStream in = null;
    try {
        in = mCtx.getResources().openRawResource(R.raw.data);
        if (in != null) {
            InputStreamReader tmp = new InputStreamReader(in);
            BufferedReader reader = new BufferedReader(tmp);
            String str;
            while ((str = reader.readLine()) != null) {
                 db.execSQL(str);
             }
         }
    } catch (java.io.FileNotFoundException e) {
         Log.d(TAG, "FileNotFoundException ",e);
    } catch (IOException e) {
         Log.d(TAG, "IOException ",e);
    } finally {
         try {
             if (in != null){
                 in.close();
             }
         } catch (IOException e) {
             e.printStackTrace();
             Log.d(TAG, "Closing",e);
         }
    }
    Log.d(TAG, "Utworzono baze danych");
}


Należy pamiętać o dodaniu tabeli android_metadata.


CREATE TABLE "android_metadata" ("locale" TEXT DEFAULT 'en_US');


i wstawienie wartości


INSERT INTO "android_metadata" VALUES ('en_US');


Jeśli chodzi o niewielkie bazy danych to ok, ale co gdy mamy do czynienia z większą ilością danych, gdy plik data.sql ma około kilka MB. Wtedy po pierwsze android nie otworzy pliku większego niż 1MB (takie systemowe ograniczenie), po drugie wykonywanie tych wszystkich insertów będzie trochę trwało, a po trzecie aplikacja będzie zajmowała więcej miejsca na telefonie niż naprawdę potrzebuje ponieważ dane się duplikują w pliku data.sql oraz w bazie danych. Niestety nie da się skasować pliku dodanego do aplikacji ponieważ plik apk jest podpisany cyfrowo.
Jeśli chodzi o pierwszy problem to plik można zawsze podzielić na kilka mniejszych tak aby nie przekraczały 1MB. W drugim przypadku możemy się pocieszyć, że wrzucanie danych następuje tylko przy pierwszym uruchomieniu, potem aplikacja startuje normalnie. Natomiast użytkownik mając niewiele miejsca na telefonie na początku wykasuje aplikacje zajmujące najwięcej miejsca, dlatego lepiej unikać duplikacji niepotrzebnych rzeczy.
Warto więc zastanowić się nad innym rozwiązaniem. W następnej części przedstawię jak można dodać do aplikacji już gotową bazę danych.


Brak komentarzy: