【问题标题】:How do I delete column from sqlite table in android?如何从android中的sqlite表中删除列?
【发布时间】:2011-12-24 02:52:58
【问题描述】:

我尝试使用以下方法删除一列

openDB.execSQL("ALTER TABLE favs" + " DROP COLUMN favsCount");

LogCat 给出以下消息:

11-07 21:18:29.238:错误/数据库(13952):在准备“ALTER TABLE favs DROP COLUMN favsCount”时,0x34e550 上的失败 1(“DROP”附近:语法错误)。

Android 的 sqlite 中不能删除字段吗?

【问题讨论】:

    标签: android sqlite


    【解决方案1】:

    对不起,SQLite doesn't support DROP COLUMN:

    (11) 如何在 SQLite 的现有表中添加或删除列。

    SQLite 具有有限的 ALTER TABLE 支持,您可以使用它来将列添加到表的末尾或更改表的名称。 [...]

    例如,假设您有一个名为“t1”的表,其中列名称为“a”、“b”和“c”,并且您想从该表中删除“c”列。以下步骤说明了如何做到这一点:

    BEGIN TRANSACTION;
    CREATE TEMPORARY TABLE t1_backup(a,b);
    INSERT INTO t1_backup SELECT a,b FROM t1;
    DROP TABLE t1;
    CREATE TABLE t1(a,b);
    INSERT INTO t1 SELECT a,b FROM t1_backup;
    DROP TABLE t1_backup;
    COMMIT;
    

    所以基本上,您必须使用“复制、删除表、创建新表、复制回”技术来删除列。

    【讨论】:

    • 当心“BEGIN TRANSACTION;”和“提交;”因为他们可以阻止数据库,因为事务已经在SQLiteOpenHelper.getWritableDatabase() 开始。
    • @Suragch 检查SQLiteOpenHelper.getWritableDatabase() 的文档(当然,假设您正在使用它)。顺便说一句,SQLite 文档引用了一些示例 SQL。
    • 好的。我不知道你是否有任何个人知识或经验。有时,当新用户不知道自己在说什么时,他们会随机发出警告。
    • 在创建 t1_backup 时从哪里获取每列的类型?
    【解决方案2】:

    因为 mu 太短表示 Sqlite 不允许执行更改表来删除列。在这里你可以看到alter syntax definition

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多