2016-09-20 2 views
0

Ich schreibe Code, der die Datenbank meiner App auf eine neue Version aktualisiert. Während des Upgrades lege ich eine Tabelle ab und erzeuge sie mit einem anderen Schema neu (einschließlich einer neuen Spalte). Wenn ich versuche, Daten aus dieser neuen Tabelle zu lesen, erstelle ich einen Cursor wie folgt:Cursor.getColumnIndex() gibt -1 für eine vorhandene Spalte zurück

Cursor cursor = database.rawQuery("SELECT * FROM " + TABLE_ALARMS, null); 

Und wenn ich versuche, Daten aus der neuen Spalte zu lesen, gibt cursor.getColumnIndex (NEW_COLUMN) -1, was bedeutet, es doesn Ich existiere nicht. Dies ist nicht korrekt, da die neue Spalte im neuen Schema enthalten ist. Weiß jemand, warum das passieren würde?

Antwort

0

ich bin nicht sicher, aber ich hatte ein Problem, wo mein Cursor alle Einträge einer Tabelle lesen würde nicht (die, die ich schaffe gerade nicht funktioniert hat) i löste es, indem Sie den Cursor zu schließen und erneut zu öffnen versuchen, dass :)

+0

Ich glaube nicht, dass ich die Datenbank in der onUpgrade() Methode schließen/öffnen kann, aber ich habe es mit dem Cursor versucht und bis jetzt schien es zu funktionieren. –

+0

Warte ich blöd erinnerte mich das falsch Ich habe nur den Cursor aktualisiert meh xD – BAAAZINGA

+0

Leider ist es konsistent. Manchmal funktioniert es, manchmal nicht. Wenn ich den Cursor in einer While-Schleife öffne/schließe, wird er auch nie aufgelöst. –

0

Es gibt kein Problem mit der Spalte, Sie können dies durch getColumnNames() oder getColumnCount() auf Ihrem Cursor überprüfen.

Was fehlt, ist der Index Ihrer Cursor, wie in rawQuery Dokumentation der Rückgabewert angegeben ist,

Ein Cursor-Objekt, die vor dem ersten Eintrag positioniert ist.

Also zunächst ist es nicht gültig, und Sie müssen ein moveFirst() oder ein moveNext() vor dem Zugriff auf Daten tun.

Verwandte Themen