从db表中删除几行

时间:2013-12-17 14:41:43

标签: android sqlite sql-delete

现在在我的代码中,我检查行数是否大于100,然后使用context.getContentResolver().delete( tablename, null, null );删除所有行。

但是我想要删除1到80之间的行,并且在删除这些行之后,将最后剩下的行偏移(重命名)从80到100 - > 1到20,如果我在该表中添加任何行,主键ID应从21开始。

有人可以帮我吗?

3 个答案:

答案 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();