SQLite Reset Primary Key Field

Tengo algunas tablas en SQLite y estoy tratando de averiguar cómo restablecer el campo de database de incremento automático.

Leí que DELETE FROM tablename debería eliminar todo y restablecer el campo de incremento automático de nuevo a 0 , pero cuando lo hago, simplemente elimina los datos. Cuando se inserta un nuevo logging, la autoincrementación comienza donde lo dejó antes de la eliminación.

Mis properties del campo de ident son las siguientes:

  • Tipo de campo : integer
  • Banderas de campo : PRIMARY KEY , AUTOINCREMENT , UNIQUE

¿Importa que construí la tabla en SQLite Maestro y también estoy ejecutando la statement DELETE en SQLite Maestro?

Cualquier ayuda sería genial.

Prueba esto:

 delete from your_table; delete from sqlite_sequence where name='your_table'; 

Autoincrement de SQLite

SQLite realiza un seguimiento del ROWID más grande que una tabla haya tenido alguna vez utilizando la tabla especial SQLITE_SEQUENCE . La tabla SQLITE_SEQUENCE se crea e inicializa automáticamente cada vez que se crea una tabla normal que contiene una columna AUTOINCREMENT. El contenido de la tabla SQLITE_SEQUENCE se puede modificar utilizando las instrucciones ordinarias UPDATE, INSERT y DELETE. Pero hacer modificaciones a esta tabla probablemente perturbe el algorithm de generación de la key AUTOINCREMENT. Asegúrese de saber lo que está haciendo antes de emprender tales cambios.

Puede restablecer por secuencia de actualización después de eliminar filas en su tabla

 UPDATE SQLITE_SEQUENCE SET SEQ=0 WHERE NAME='table_name'; 

Como una opción alternativa, si tiene el browser de la database Sqlite y está más inclinado a una solución GUI, puede editar la tabla sqlite_sequence donde nombre de campo es el nombre de su tabla. Haga doble clic en la celda para el campo seq y cambie el valor a 0 en el cuadro de dialog que aparece.

Si desea restablecer cada RowId a través del proveedor de contenido, intente esto

 rowCounter=1; do { rowId = cursor.getInt(0); ContentValues values; values = new ContentValues(); values.put(Table_Health.COLUMN_ID, rowCounter); updateData2DB(context, values, rowId); rowCounter++; while (cursor.moveToNext()); public static void updateData2DB(Context context, ContentValues values, int rowId) { Uri uri; uri = Uri.parseContentProvider.CONTENT_URI_HEALTH + "/" + rowId); context.getContentResolver().update(uri, values, null, null); }