SQLite - onUpgrade

0

Dobry wieczór wszystkim,
Mam taki drobny problem z metodą onUpgrade. Próbuję ją wywołać w swojej głównej klasie i za nic nie mogę dojść co kryje się pod pierwszym jej parametrem: SQLiteDatabase db :(

Wygląda ona u mnie następująco:

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
        onCreate(db);

    }

Chciałbym ją wywołać w klasie MainActivity, aby przy każdorazowym jej starcie, czyściła mi tabelę i tworzyła ją on nowa ponieważ jest to tabela pomocnicza, która ma zastosowanie wyłącznie dla jednorazowej sesji aplikacji. Robię:

dataDb.onUpgrade();

I teraz w wywołaniu tej metody muszę podać 3 parametry, między innymi SQLiteDatabase db i za nic w świecie nie mogę dojść jaką wartość on przyjmuje. Nazwa bazy danych w postaci stringa to nie jest. Czy mogę Was prosić o pomoc.

0

Cześć.

Metoda onUpgrade jest wywoływana automatycznie przez system w momencie jak zmienisz wersję bazy danych czyli ty jej sam nie powinieneś wywoływać. Zrobić to za Ciebie android w momencie gdy zobaczy że dbVersion (czyli to co masz w konstruktorze SQLiteOpenHelper) będzie inny niż obecna wersja bazy danych. Także tą metodę przeciążysz wtedy jeżeli chcesz zrobić np. jakąś migrację przy zwiększaniu wersji bazy danych, albo np. jak chcesz dodać jakieś pole do tabeli itd.

dokładny opis
http://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper.html#onUpgrade(android.database.sqlite.SQLiteDatabase, int, int)
pzdr

0

Dzięki serdeczne za odpowiedź.
Czyli jeśli chcę za każdym razem przy starcie aktywności usunąć tabelę i utworzyć ją ponownie to muszę po prostu stworzyć metodę boolowską którą będą usuwał tabele i tworzył ją od nowa a następnie wywołać ją w swojej klasie głównej? Dobrze mówię?

0

Pewnie tak. Tylko wtedy pojawia sie pytanie o sens uzycia content providera. Po co Ci on jak za kazdym razem chcesz go dropowac

0

To jest moja tabela pomocnicza, taki mały temp w którym zapisuję sobie 14 zmiennych po każdej rundzie gry (aplikacja do rejestrowania wyników). A baza jest mi potrzebna po to, bo aktywności która odpowiada za rejestrowanie wyników jest przycisk UNDO i RENDO. Więc muszę mieć możliwość cofnięcie się do poprzednich wyników. Zatem aby to zrobić zapisuję je w tabeli pomocniczej. Nie chcę używać SharedPreferences ponieważ będzie zbyt wiele danych do zapisania. Maksymalnie mogę mieć 60 rund z każdej po 14 zmiennych więc musiał bym zapamiętać 840 wartości. Dlatego SharedPreferences średnio widzę do tego rozwiązania. A bazą sobie to elegancko załatwiam. No i oczywiście po rozpoczęciu nowej gry (przy starcie aktywności) chcę tą tabelę czyścić. Mogę zrobić delete ale wtedy nie zerują mi się indeksy. Może jest jakieś wydajniejsze rozwiązanie do tego o którym nie wiem. Jestem otwarty na propozycje od zdecydowanie bardziej doświadczonych kolegów :)

0

No to właśnie bez sensu stosujesz Content Providera. Jeżeli Ci jest potrzebne dane tylko w obrąbie jednej aktywności to stwórz sobie klasę która to będzie przechowywała. Na jakiego grzyba Ci to persistować w bazie danych czy w sharedPreferences?

0

Ale masz na myśli przechowywanie tych danych w jakiejś tablicy? Nie do końca tylko w ramach jednej aktywności bo po zakończeniu gry w drugiej aktywności muszę zrobić taką aktywność z rezultatami gdzie będą w tabeli ładnie ułożone wyniki po każdej rundzie także będę z tych danych korzystał w innej aktywności.

0

To cały czas nie jest powód żeby zaprzęgać do tego ContentProvidera. To jest do kitu rozwiązanie. Zrób sobie jakiegoś singletona lub wysyłaj od biedy w intent

0

Ale jaką strukturę masz dokładnie na myśli? W czym to mogę trzymać. Bo z tego co się orientuję to u mnie najlepiej sprawdziła by się tablica dwuwymiarowa. Ale niestety tą muszę zadeklarować a ja finalnie nie wiem jak długa ona będzie. Może być 14 x 60 a może być 14 x 3. Bez sensu deklarować taką dużą tablicę jeśli nie zawsze będzie używana. Może masz gdzieś jakiś przykład na którym mógłbym się wzorować budując taką strukturę?

0

Bez sensu to dokładać ContentProvidera. A słyszałeś o Listach ? ArrayList itp ?

1 użytkowników online, w tym zalogowanych: 0, gości: 1