Wie kann ich eine Autoinkrement-Sequenznummer in sqlite zurücksetzen?

7

Wie aktualisiert man die Tabelle sqlite_sequence in Ormlite? Ich brauche nur Update Seq. Wie kann ich diese Tabelle über ORMLite bekommen?

BEARBEITEN

Ich kann das ORLite-Tool dafür nicht finden, stattdessen benutze ich eine einfache SQLite-Abfrage. In meiner Klasse erweitert OrmLiteSqliteOpenHelper Ich benutze SQLiteDatabase, um dieses Update zu machen.

EDIT2;)

In meinem Projekt beharre ich Klassenlektion und Klasse WeekDefinition.

%Vor%

Jetzt, wenn ich neue Lektionen hinzufüge, wird die ID erhöht. Zum Beispiel

%Vor%

und in weekDefinition:

%Vor%

SQLite fügt diese Zeile in sqlite_sequence ein (bei Verwendung von autoincrement)

%Vor%

Jetzt lösche ich alle Zeilen aus den Tabellen Lesson und WeekDefinition. Lesson und WeekDef sind danach leer, aber sqlite_sequence ist immer noch gleich. Und das ist ein Problem, weil die ID in der Tabellenlektion mit dem Wert 4 beginnt (seq von sqlite_sequence für die Lektion und addiere 1):

%Vor%

und weekDefinition

%Vor%

und für Lektion ID = 4, Math ich sollte weekDefinitios, aber in weekDefinitions lektionen_id hat nur Wert von 1 bis 3 Und das ist mein Problem. Ich brauche "sqlite_sequence table" (oder gibt es eine bessere Lösung?)

    
Bandzio 07.04.2011, 19:08
quelle

4 Antworten

19

Aufbauend auf der Antwort von Marcos Vasconcelos :

%Vor%

Diese Abfrage setzt seq auf den größten Wert in der Spalte col identity in der Tabelle Tbl , sodass kein Risiko besteht, Einschränkungen zu verletzen.

    
Trisped 12.01.2013 22:08
quelle
9

In Ihrer .db-Datei befindet sich eine Tabelle namens sqlite_sequence

Jede Zeile hat zwei Spalten name ist der Name der Tabelle seq Eine Ganzzahl, die den letzten Wert an dieser Tabelle angibt

Sie können es auf 0

aktualisieren

Aber Vorsicht, wenn Ihre Tabelle diese ID als eindeutigen Bezeichner verwendet.

    
Marcos Vasconcelos 08.04.2011 19:45
quelle
1
%Vor%     
Huỳnh Ngọc Bang 19.09.2016 12:13
quelle
0

Oh, ich verstehe es jetzt. Wenn Sie allgemeine Datenbankbefehle in ORMLite ausgeben möchten, können Sie die Methode updateRaw verwenden. Siehe Javadocs . Es gibt auch executeRaw für andere Befehle.

%Vor%

Sie können die Tabelle auch löschen und neu erstellen:

%Vor%

Ich denke, die wirkliche Frage ist, warum hängt Ihre Anwendung von dieser internen Datenbanknummer ab? Es sollte sich wirklich nicht interessieren.

  • Wie wäre es damit, die Nummer überhaupt nicht anzuzeigen, so dass es 1 oder 1001 sein kann und Ihre Bewerbung keine Rolle spielt?
  • Sie könnten die Lektionen auch niemals entfernen, aber vielleicht ein verstecktes boolesches Feld hinzufügen. Wenn sie erneut hinzugefügt werden, könnte das versteckte Feld auf "false" gesetzt werden und Math würde immer noch bei ID # 1 sein.
Gray 08.04.2011 19:04
quelle

Tags und Links