6

如何删除并重新创建包含更新信息的表?

例如; 我的应用程序中有一个包含 5 条记录的表。

ID     Entry
1      a
2      b
3      c
4      d
5      e

现在,当我删除一条记录时,可以说 ID 3 表变为

 ID     Entry
1      a
2      b
4      d
5      e

我怎样才能删除它,并重新创建它成为这样:

  ID     Entry
1      a
2      b
3      d
4      e

实际上删除是由用户控制的,因此任何记录都可以随时删除。

4

3 回答 3

13

您可以执行以下操作:删除要删除的行:

     public boolean deleteRow(int id) 
      {
         return db.delete(YOUR_TABLE, ROW_ID + "=" + _id, null) > 0;
       }

将剩余条目(仅条目,而不是 id)读入 ArrayList,删除您的表:

        db.execSQL("DROP TABLE IF EXISTS " + YOUR_TABLE);

并重新创建您的表。然后 ID 编号将再次按顺序从 1-XX

于 2013-01-22T09:15:55.940 回答
1

我知道这是一篇旧帖子,但我想我会根据您的评论为可能与您做同样事情的其他人澄清事情:

删除记录时,删除过程由当前选定的行完成,因为我最多只能选择第 4 行,因此永远无法删除 ID 5。

你真的不应该重新创建你的 ID。如果它们被用作另一个表中的键,它会搞砸事情,另外,如果你有一个大型数据库,重新创建它们只会浪费时间,而实际上没有必要。

您应该做的是保存一个 id 数组和一个条目数组,这样您就可以根据他们选择的行知道要删除哪个 id(或链接 id 和值的其他方式,以便以后获取它们)。

在上面的示例中,在有人删除了 id 为 3 的行后,您的数组将如下所示:

entries = { "a","b","d","e" }
ids = { 1,2,4,5 }

如果有人选择“e”,这是第四个项目,您只需从表中删除 id 等于 ids 数组中的第四个值,在本例中为 5。

这样,如果不断添加和删除项目,您的数据库可能会以 2、34、56 和 435 的 ID 结束。这没关系,因为您的代码将跟踪并知道要删除哪个 ID。

于 2016-02-17T16:20:07.360 回答
0

另一种方法

public boolean deleteTable(int id) {
    SQLiteDatabase database = dbHelper.getReadableDatabase();
    final String whereClause = DBHelper.COLUMN_ID + "=?";
    final String whereArgs[] = {String.valueOf(id)};
    int affectedRows = database.delete(DBHelper.TABLE_NAME_OGR, whereClause, whereArgs);
    return affectedRows > 0;
}
于 2018-03-08T20:41:10.960 回答