重命名列名时的 SQLITE 语法错误代码 1

Posted

技术标签:

【中文标题】重命名列名时的 SQLITE 语法错误代码 1【英文标题】:SQLITE syntax error code 1 when renaming a column name 【发布时间】:2020-09-27 20:18:55 【问题描述】:

我正在我的 android 应用中迁移 Room 数据库。这是迁移代码:

static final Migration MIGRATION_1_2 = new Migration(1, 2) 
    @Override
    public void migrate(SupportSQLiteDatabase database) 
        database.execSQL("ALTER TABLE item RENAME itemInfoId TO itemId");
    
;

错误信息

android.database.sqlite.SQLiteException: near "itemInfoId": syntax error (code 1 SQLITE_ERROR): , while compiling: ALTER TABLE item RENAME itemInfoId TO itemId

我也试过"ALTER TABLE item RENAME COLUMN itemInfoId TO itemId"的SQL,同样的错误

android.database.sqlite.SQLiteException: near "COLUMN": syntax error (code 1 SQLITE_ERROR): , while compiling: ALTER TABLE item RENAME COLUMN itemInfoId TO itemId

【问题讨论】:

【参考方案1】:

重命名关键字在 SQLite 版本 3.25 中可用,但不适用于最新的 android 版本。您将不得不手动升级表

1.使用正确的列值 itemId 创建 item_tmp 表

CREATE TABLE item_tmp(<column1> <data_type>, itemId <data_type>,.....)

2.将数据从item复制到item_tmp

INSERT INTO item(<column1>, <column2>,..) 
    SELECT <column1>, <column1>, ... 
    FROM item_tmp;

3.删除表格项

DROP TABLE item;

4.重命名item_tmp表

ALTER TABLE item_tmp RENAME TO item;

【讨论】:

我认为我在 2018 年看到了同样的问题。我原以为现在会解决这个问题。有关手动升级表的任何提示?我已经用20条记录做了一次,这不是什么大问题,但是再做一次会很乏味,将来会有数百条记录。 更新了答案。 请注意,此答案中的操作顺序是在 the documentation 中明确指出不正确的顺序。 谢谢@Shawn 和 user2864740。我已经更新了答案,请验证。 可能有通用的方法吗?有些喜欢我在删除列时看到的,如下所示:***.com/a/51587449/878126

以上是关于重命名列名时的 SQLITE 语法错误代码 1的主要内容,如果未能解决你的问题,请参考以下文章

使用 spark sql 重命名 Parquet 文件中列名中的空格

是否可以重命名视图中的列?

SQLite 错误代码 1:语法错误

Django 2.0.7 - 进行重命名字段迁移时出现语法错误

android.database.sqlite.SQLiteException:靠近“WHERE”:语法错误(Sqlite 代码 1)

php: 警告:重命名文件名、目录名或卷标语法不正确。 (代码:123)