2012-04-03 9 views
0

ich auf einer Android 2.3.3 Anwendung arbeite, die derzeit SQLITE als DB.I verwendet ist mit dem internen ROWID in SQLite auf meine Zeilen zu aktualisieren und Abrufen von Daten .Ich habe kürzlich herausgefunden, dass sich die interne ROWID für meine Zeilen ändert. Ich kenne den Grund dafür nicht. Das Problem ist, dass ich diese ROWID zwischenspeichere, um später eine Aktualisierungsoperation durchzuführen. Wenn sich die ROWID ändert, könnte ich das tun Aktualisieren Sie die falsche Zeile.Probleme im Caching-internen SQLITE Rowid in Android

Ich denke, dass es zwei Lösungen gibt.

(1) Verhindern, dass sich die interne ROWID ändert (was ich nicht weiß). Kann mir jemand mitteilen, was diese ROWID-Änderung verursacht?

(2) Definieren Sie eine INTEGER PRIMARY KEY-Spalte und verwenden Sie diese als ROWID.

Lassen Sie mich wissen, wenn es möglich ist, die Rowid-Änderung zu verhindern, sonst werde ich die zweite Lösung übernehmen.

Danke!

Antwort

1

Sie sollten INTEGER PRIMARY KEY für die Zeilen-ID verwenden.

Können Sie die Tabellendefinition posten, die Sie gerade verwenden? Der Wert, den Sie verwenden, sollte sich nicht ändern, es sei denn, a) Sie ändern es oder b) Sie haben es auf eine seltsame Weise definiert.

+0

führt Wie ich bereits erwähnte ich die SQLite-interne Rowid bin mit – rogerstone

0

Ich denke, es ist ein Prozess, in Ihrer Anwendung, die die DB (Vakuum) komprimiert und dies könnte die Rowid der ändern, wenn es Deletionen vor, dass Kompresse

+0

meinem App hat keine Prozesse. Ich weiß nicht, ob es interne Prozesse im Betriebssystem gibt, die dies tun. – rogerstone

+0

Ich verstehe jetzt, was Sie tun. Sie sollten die SQLite-Dokumentation zur internen ROWID lesen, um zu sehen, ob sie für Ihre Situation gilt: http://www.sqlite.org/autoinc.html. Möglicherweise löschen Sie die Zeile mit dem maximalen ROWID-Wert, wodurch sich der ROWID-Algorithmus unerwartet verhält. –