Hallo Community,
ich betreibe eine App, bei der mit jedem Update eine Datenbank mit zahlreichen Begriffen aktualisiert werden soll. Dafür gebe ich die Datenbank Verwaltung.db mit. In der Verwaltung ist die Tabelle Begriffe.
Die Struktur von Begriffe war in der 1. Version: ID, x,x
Für die 2. Version habe ich die Struktur wegen eines Tutorials verändert in: _id,x,x
Das Update hat die App total zerstört, weil im Code meine Abfragen einer _id galten. Allerdings war in der Tabelle noch die ID-Spalte existent, weshalb folgender Fehler erschien:
android.database.sqlite.SQLiteException: no such column: _id: , while compiling: SELECT _id, FRAGE, KATEGORIE, KATEGORIEID, LASTACCES, LASTUPDATE FROM KATEGORIEN ORDER BY LASTUPDATE DESC limit 1
D.h. die ursprüngliche Tabelle Begriffe wurde nicht gelöscht. Der Fehler ist klar. Allerdings sollte folgender Code eigentlich dafür sorgen, dass die Datenbank neu aufgesetzt wird:
Das 1. Update hat also dafür gesorgt, dass jeder der die App schon besaß, sie nochmal umständlich über den Play Store laden musste und nicht einfach upgraden konnte. Weil die Anzahl der aktiven Benutzer nun schon deutlich gewachsen ist, möchte ich denselben Fehler beim 2. Update nicht nochmal machen.
Was übersehen ich bei meinem Code? Ich dachte die onUpgrade-Methode wird bei jedem Appaufruf einmal automatisch abgefragt? Kann mich jemand aufklären?
Oder muss ich ein SQLite-Update iwie im Manifest mitteilen?
Mir kommt es so vor, dass wenn ich über eclipse die App auf mein Handy spiele, das nicht derselbe Prozess ist wie wenn man über den Play Store eine App upgradet? Kann das sein?
Mir ist nur wichtig, dass die Benutzer ein Upgrade so komfortabel wie möglich genießen
ich betreibe eine App, bei der mit jedem Update eine Datenbank mit zahlreichen Begriffen aktualisiert werden soll. Dafür gebe ich die Datenbank Verwaltung.db mit. In der Verwaltung ist die Tabelle Begriffe.
Die Struktur von Begriffe war in der 1. Version: ID, x,x
Für die 2. Version habe ich die Struktur wegen eines Tutorials verändert in: _id,x,x
Das Update hat die App total zerstört, weil im Code meine Abfragen einer _id galten. Allerdings war in der Tabelle noch die ID-Spalte existent, weshalb folgender Fehler erschien:
android.database.sqlite.SQLiteException: no such column: _id: , while compiling: SELECT _id, FRAGE, KATEGORIE, KATEGORIEID, LASTACCES, LASTUPDATE FROM KATEGORIEN ORDER BY LASTUPDATE DESC limit 1
D.h. die ursprüngliche Tabelle Begriffe wurde nicht gelöscht. Der Fehler ist klar. Allerdings sollte folgender Code eigentlich dafür sorgen, dass die Datenbank neu aufgesetzt wird:
Code:
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.w(MySQLiteHelper.class.getName(),
"Upgrading database from version " + oldVersion + " to "
+ newVersion + ", which will destroy all old data");
db.execSQL("DROP TABLE IF EXISTS " + DATABASE_NAME);
System.out.println("TABLE GEDROPPT");
onCreate(db);
}
Das 1. Update hat also dafür gesorgt, dass jeder der die App schon besaß, sie nochmal umständlich über den Play Store laden musste und nicht einfach upgraden konnte. Weil die Anzahl der aktiven Benutzer nun schon deutlich gewachsen ist, möchte ich denselben Fehler beim 2. Update nicht nochmal machen.
Was übersehen ich bei meinem Code? Ich dachte die onUpgrade-Methode wird bei jedem Appaufruf einmal automatisch abgefragt? Kann mich jemand aufklären?
Oder muss ich ein SQLite-Update iwie im Manifest mitteilen?
Mir kommt es so vor, dass wenn ich über eclipse die App auf mein Handy spiele, das nicht derselbe Prozess ist wie wenn man über den Play Store eine App upgradet? Kann das sein?
Mir ist nur wichtig, dass die Benutzer ein Upgrade so komfortabel wie möglich genießen