【问题标题】:Delete few rows from db table [closed]从数据库表中删除几行[关闭]
【发布时间】:2013-12-17 14:41:42
【问题描述】:

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

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

有人可以帮我解决这个问题吗?

【问题讨论】:

  • 当你删除 20-100 时你想把 first 的 id 改成 0
  • 我要删除 1-80,剩下的 80-100 应该重命名为 1 到 20,新添加的行应该继续 21

标签: android sqlite sql-delete


【解决方案1】:

假设您的表的主键名为 _id 并设置为自动增量。删除不需要的 80 行:

String query = "DELETE FROM " + tablename + " WHERE _id <= 80";
context.getContentResolver().execSQL(query);

对于那些剩余的行(即 id 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 开始。

【讨论】:

    【解决方案2】:

    试试下面的代码

    for (int i=20 , i<101 ; i++)
    {    
        database.delete(tableName,"ID = " +String.valueof(i), null);
    }
    

    【讨论】:

    • 对不起,我最初的帖子不清楚。我给你更新了最新的
    【解决方案3】:

    您永远不应该更改主键的值,因为他的值必须是唯一的。使用另一个字段(例如“row_number”)。

    请求删除 0 到 80 之间的行(包括)

    db.beginTransaction();
    db.delete("TABLE_NAME", "row_number <= 80" , null);
    db.setTransactionSuccessful();
    db.endTransaction();
    

    请求将 81 和 100 之间的行更新为 0-20

    db.beginTransaction();
    db.execSQL("UPDATE " + TABLE_NAME + " SET row_number = row_number - 80;");
    db.setTransactionSuccessful();
    db.endTransaction();
    

    【讨论】:

    • 这并没有真正回答这个问题,它更多的是对 OP 提到的一个附带话题的评论。您能否详细说明并修改您的答案以更好地针对问题?
    猜你喜欢
    • 1970-01-01
    • 2019-09-16
    • 2016-09-15
    • 1970-01-01
    • 1970-01-01
    • 2014-06-08
    • 1970-01-01
    • 2011-11-10
    相关资源
    最近更新 更多