2012-12-10 8 views
5

Ho un dubbio che se si elimina la tabella utilizzando seguenti dichiarazioni,Database SQLite Android Dopo aver eliminato la tabella, l'ID inizia da 1?

 SQLiteDatabase db = this.getWritableDatabase(); 
    db.delete(date_difference, null, null); 

quindi se io sono l'inserimento di una riga come un disco fresco e prima nella tabella, sarà l'id primario incremento automatico chiave della i record iniziano da 1?

risposta

4

Se non è specificato ROWID sull'inserto, o se il ROWID specificato ha un valore NULL, poi un ROWID appropriato viene creato automaticamente. Il solito algoritmo consiste nel dare alla riga appena creata un ROWID che sia uno più grande del ROWID più grande nella tabella prima dell'inserto. Se la tabella è inizialmente vuota, viene utilizzato un ROWID di 1. Se il ROWID più grande è uguale al numero intero più grande possibile (9223372036854775807), il motore del database inizia a selezionare i ROWID candidati candidati in modo casuale finché non ne trova uno che non sia stato utilizzato in precedenza. .

Quindi sì, dopo aver eliminato il tavolo, gli ID partirà dal 1

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

2

La documentazione previste afferma che tale metodo di eliminazione è una:

Convenience method for deleting rows in the database. 

La sintassi è:

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

Quindi non partirà dal 1 di nuovo. Continuerà dall'ultimo incremento. Se avete cancellato l'intera tabella, poi ri-creato, l'incremento avrebbe cominciato a 1.

1

SQLite tiene traccia del più grande ROWID che una tabella abbia mai tenuto utilizzando una tabella interna denominata "sqlite_sequence". La tabella sqlite_sequence viene creata e inizializzata automaticamente ogni volta che viene creata una tabella normale che contiene una colonna AUTOINCREMENT **. Il contenuto della tabella sqlite_sequence può essere modificato utilizzando le normali istruzioni UPDATE, INSERT e DELETE **. Tuttavia, apportare modifiche a questa tabella probabilmente perturba l'algoritmo di generazione chiavi AUTOINCREMENT. Assicurati di sapere cosa stai facendo prima di intraprendere tali cambiamenti.

Quindi, quando si elimina il tavolo e si ri-crea, si dovrebbe fare il riavvio SQLITE_SEQUENCE da 0.

Si dovrebbe fare qualcosa di simile:

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

cura perché il campo 'table name' in dove clausola è case sensitive.

Leggi this per ulteriori informazioni.

0

definire il campo chiave primaria come

INTEGER PRIMARY KEY AUTOINCREMENT DEFAULT 1 

Quindi rimuovere il codice se si sta facendo inserimento di qualsiasi valore per il campo della chiave primaria come segue

values.put(KEY_PRIMARY, object.getIntegerValue()); 
Problemi correlati