现在在我的代码中,我检查行数是否大于100,然后使用context.getContentResolver().delete( tablename, null, null );
删除所有行。
但是我想要删除1到80之间的行,并且在删除这些行之后,将最后剩下的行偏移(重命名)从80到100 - > 1到20,如果我在该表中添加任何行,主键ID应从21开始。
有人可以帮我吗?
答案 0 :(得分:1)
假设您的表的主键名为_id并设置为自动增量。删除不需要的80行:
String query = "DELETE FROM " + tablename + " WHERE _id <= 80";
context.getContentResolver().execSQL(query);
对于那些剩余的行(即81到100),通过减去80来更新id,这样它们就会从1 - 20开始:
query = "UPDATE " + tablename + " SET _id = _id - 80";
context.getContentResolver().execSQL(query);
更新此表的sqlite_sequence表中的条目。将seq设置为表格中最后一个id的值:
query = "UPDATE sqlite_sequence SET seq = 20 WHERE name = '" + tablename + "'";
context.getContentResolver().execSQL(query);
下次插入时,_id将从21继续。
答案 1 :(得分:0)
尝试以下代码
for (int i=20 , i<101 ; i++)
{
database.delete(tableName,"ID = " +String.valueof(i), null);
}
答案 2 :(得分:-1)
您永远不应该更改主键的值,因为他的值必须是唯一的。使用另一个字段do(例如“row_number”)。
请求删除0和0之间的行80(包括在内)
db.beginTransaction();
db.delete("TABLE_NAME", "row_number <= 80" , null);
db.setTransactionSuccessful();
db.endTransaction();
要求更新81&amp;之间的行100至0-20
db.beginTransaction();
db.execSQL("UPDATE " + TABLE_NAME + " SET row_number = row_number - 80;");
db.setTransactionSuccessful();
db.endTransaction();