2013-06-29 9 views
7

Dziękuję za przeczytanie i pomoc :)Jak zaktualizować tabelę z activeandroid po dodaniu nowej kolumny

Używam ActiveAndroid 3.0 - Android 2.2 - W mojej aplikacji mam model o nazwie „user”. początkowo stworzyłem tylko model z kolumnami/atrybutami (id, name, passcode), uruchomiłem aplikację na emulatorze i działało.

@Table(name = "user") 
public class User extends Model { 
    @Column (name = "name") 
    public String name; 
    @Column (name = "pass_code") 
    public String passCode; 
} 

Następnie dodałem nową kolumnę/atrybut - profileImage. Uruchomiłem aplikację na emulatorze i mam SQLite column profileImage nie istnieje błąd.

@Table(name = "user") 
public class User extends Model { 
    @Column (name = "name") 
    public String name; 
    @Column (name = "pass_code") 
    public String passCode; 
    @Column (name = "profile_image") 
    public String profileImage; 
} 

Próbowałem zmienić nazwę bazy danych ActiveAndroid i aktualizować właściwości wersji bazy danych w pliku manifestu.

<meta-data android:name="AA_DB_NAME" android:value="my_app.db" /> 
<meta-data android:name="AA_DB_VERSION" android:value="2" /> 

Ale nadal otrzymuję kolumna nie istnieje błąd.

ERROR AndroidRuntime Caused by: android.database.sqlite.SQLiteException: 
no such column: profile_image: , while compiling: SELECT * FROM user WHERE profile_image = ? 

Próbowałem również, un-instalowanie aplikacji z emulatora, ponowne uruchomienie emulatora, nazywając ActiveAndroid.cacheClear(). Jak dotąd nic z tego nie zadziałało.

Naprawdę doceniam każdą pomoc. dzięki.

Odpowiedz

19

Z ich dźwięków brakuje skryptu aktualizacyjnego, aby przenieść tabelę user do nowego schematu. Skrypty aktualizacji zawierają instrukcje dotyczące przejścia ze starego stanu bazy danych do nowego. W konkretnym przypadku powinieneś poinformować SQLite, że powinien dodać nową kolumnę, profile_image, do istniejącej tabeli użytkowników.

Aby zaktualizować bazę danych ze schematu 1 do 2, podnieś wartość AA_DB_VERSION do 2 i nadaj skryptowi aktualizacji nazwę 2.sql. Zapisz plik pod assets/migrations i nadać mu następującą treść:

ALTER TABLE user ADD profile_image TEXT; 

Skrypty mogą zawiera żadnych zestawu instrukcji SQL, które mogą być wykonywane przez SQLiteDatabase przez execSQL(...).

Więcej informacji na temat migracji schematów za pomocą Aktywnego Androida można znaleźć pod numerem the wiki on the GitHub project page.

+0

dzięki za pomoc, bardzo doceniane. – dagger

+1

Z ciekawości, czy nie powinno się usuwać aplikacji i jej ponowna instalacja zadziałała? A może usunięcie aplikacji nie powoduje usunięcia DB? –

+1

@JoshPinter: Tak, odinstalowanie aplikacji powinno działać. W rzeczywistości uderzenie w "Clear Data" powinno również nastąpić. Nie jest to jednak rozwiązanie długoterminowe, ponieważ prawdopodobnie nie chcesz, aby użytkownicy Twojej aplikacji przechodzili przez ten proces. Prawidłowe podejście polega na zapewnieniu odpowiedniej logiki aktualizacji schematu. –

1

W „TEXT” etykieta zmienia się na „VARCHAR” dla migracji bazy danych przy użyciu ActiveAndroid

Wszystkie inne słowa zarezerwowane zostały wyróżnione za wyjątkiem „TEXT”. Użyłem "VARCHAR" i zadziałało.

Powiązane problemy