2012-12-10 10 views

Antwort

4

Wenn keine ROWID an dem Einsatz festgelegt ist, oder wenn die spezifizierte ROWID einen Wert NULL hat, wird eine entsprechende ROWID wird automatisch erstellt. Der übliche Algorithmus besteht darin, der neu erstellten Zeile eine ROWID zu geben, die ist, die um eins größer ist als die größte ROWID in der Tabelle vor dem Einfügen. Wenn die Tabelle anfänglich leer ist, wird eine ROWID von 1 verwendet. Wenn die größte ROWID gleich der größtmöglichen Ganzzahl (9223372036854775807) ist, beginnt die Datenbank-Engine, positive Kandidaten-ROWIDs nach dem Zufallsprinzip auszuwählen, bis eine solche gefunden wird, die zuvor nicht verwendet wurde.

Also ja, nachdem Sie die Tabelle löschen, werden IDs ab 1

http://www.sqlite.org/autoinc.html

2

Die Dokumentation besagt, dass die Löschmethode a:

Convenience method for deleting rows in the database. 

Die Syntax ist:

int delete(String table, String whereClause, String[] whereArgs) 

Deshalb wird es nicht von 1 wieder starten. Es wird vom letzten Schritt fortgehen. Wenn Sie die gesamte Tabelle löschten und dann neu erstellten, begann das Inkrement mit 1.

1

SQLite verfolgt die größte ROWID, die eine Tabelle jemals mit einer internen Tabelle namens "sqlite_sequence" gehalten hat. Die Tabelle sqlite_sequence wird automatisch erstellt und initialisiert, wenn eine normale Tabelle erstellt wird, die eine AUTOINCREMENT-Spalte enthält **. Der Inhalt der Tabelle sqlite_sequence kann mit den normalen Anweisungen UPDATE, INSERT und DELETE ** geändert werden. Aber Modifikationen an dieser Tabelle werden wahrscheinlich den AUTOINCREMENT-Schlüsselgenerierungsalgorithmus stören. Stellen Sie sicher, dass Sie wissen, was Sie tun, bevor Sie solche Änderungen vornehmen.

Also, wenn Sie Ihre Tabelle löschen und Sie neu erstellen, sollten Sie die SQLITE_SEQUENCE Neustart machen von 0.

Sie sollten etwas tun:

Delete from date_difference;  
Delete from sqlite_sequence where name='date_difference'; 

Pflege, weil das Feld 'table name' in Where-Klausel ist Groß-/Kleinschreibung.

Lesen Sie this für weitere Informationen.

0

das primäre Schlüsselfeld definieren als

INTEGER PRIMARY KEY AUTOINCREMENT DEFAULT 1 

dann den Code entfernen, wenn Sie tun werden Einfügen eines Wertes für das Primärschlüsselfeld wie folgt

values.put(KEY_PRIMARY, object.getIntegerValue()); 
Verwandte Themen