我正在使用提供程序删除SQLiteOpenHelper
表中的所有数据,假设我有5行,我删除了表中的数据,如果我再次填充表格,数据_ID
列从6开始
SQLite TABLE
final String HISTORY = "CREATE TABLE " + Contract.History.TABLE + " (" +
Contract.History._ID + " INTEGER PRIMARY KEY AUTOINCREMENT," +
Contract.History.ROW + " INTEGER NOT NULL, " +
Contract.History.HISTORY_NAME + " TEXT NOT NULL " +
" );";
在提供商中删除SNIPPET
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
final SQLiteDatabase db = database.getWritableDatabase();
final int match = matcher.match(uri);
int rowsDeleted;
if ( null == selection ) selection = "1";
switch (match) {
case HISTORY:
rowsDeleted = db.delete(
Contract.History.TABLE, selection, selectionArgs);
break;
default:
throw new UnsupportedOperationException("Unknown uri: " + uri);
}
// Because a null deletes all rows
if (rowsDeleted != 0) {
getContext().getContentResolver().notifyChange(uri, null);
}
return rowsDeleted;
}
我如何删除
ContentResolver resolver = getContentResolver();
resolver.delete(Contract.Running.CONTENT_URI,null,null);
}
答案 0 :(得分:0)
这是一种常规的数据库行为,它不是代码或查询中的错误,而是SQLite的工作方式。 SQLite网站声明:
SQLite跟踪表所持有的最大ROWID 使用名为" sqlite_sequence"的内部表。 sqlite_sequence 每当普通表时,都会自动创建和初始化表 包含AUTOINCREMENT列的创建。的内容 可以使用普通的UPDATE,INSERT修改sqlite_sequence表, 和DELETE语句。但是对这个表进行修改会 可能扰乱AUTOINCREMENT密钥生成算法。确保 在你做出这些改变之前,你知道自己在做什么。
我建议不要改变,除非你真的知道你在做什么。但如果你想要,你可以这样做:
DELETE FROM sqlite_sequence WHERE name = '<YOUR_TABLE>';
如果只删除某些行,也可以更新音序器。
UPDATE SQLITE_SEQUENCE SET seq = <n> WHERE name = '<YOUR_TABLE>'