如何从android中的sqlite表中删除列?

Abh*_*rma 22 sqlite android

我尝试使用以下内容删除列

openDB.execSQL("ALTER TABLE favs" + " DROP COLUMN favsCount");
Run Code Online (Sandbox Code Playgroud)

LogCat给出以下消息:

11-07 21:18:29.238:错误/数据库(13952):当准备'ALTER TABLE favs DROP COLUMN favsCount'时,0x34e550上的失败1(接近"DROP":语法错误).

是不是可以在Android的sqlite中删除字段?

mu *_*ort 44

抱歉,SQLite 不支持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;
Run Code Online (Sandbox Code Playgroud)

所以基本上,你必须使用"复制,删除表,创建新表,复制回"技术来删除列.

  • 如果您正在编写Room迁移,请注意`database.execSQL`一次仅适用于单个语句,即它将变为`database.execSQL(CREATE TEMPORARY TABLE ...)`database.execSQL(INSERT INTO ...)`等 (2认同)

Jor*_*lla 5

因为 mu 太短表示 Sqlite 不允许执行更改表来删除列。在这里您可以看到更改语法定义