【问题标题】:SQLite Drop and Recreate TableSQLite 删除并重新创建表
【发布时间】:2013-01-22 08:40:19
【问题描述】:

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

例如;我的应用程序中有一个包含 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 行,所以永远不能删除 ID 5。
  • 我必须说我很困惑。 :)

标签: android sqlite sql-drop


【解决方案1】:

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

     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 顺序排列

【讨论】:

  • 这就是我所拥有的。但是,当我删除表然后重新创建它时,它会以 NullPointer 的形式返回。我不知道我想我得再摆弄一下。
  • 那么您能否显示您在哪里执行此操作的代码?例如,如果您以错误的顺序完成了它,则可能在将表保存到 arrayList 之前删除了您的表。这可能是您获得空指针的原因。在德国我们说,有时你看不到森林,因为有这么多树:)
  • EXISTS后需加空格
  • 查询末尾不需要分号吗? db.execSQL("如果存在则删除表" + YOUR_TABLE +";");
【解决方案2】:

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

当一条记录被删除时,删除过程由当前的 选定的行,因为我最多只能选择第 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。

【讨论】:

    【解决方案3】:

    另一种方法

    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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多