【问题标题】:SQLITE syntax error code 1 when renaming a column name重命名列名时的 SQLITE 语法错误代码 1
【发布时间】: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

【问题讨论】:

    标签: android sqlite syntax migration rename


    【解决方案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。我已经更新了答案,请验证。
    • 可能有通用的方法吗?有些喜欢我在删除列时看到的,如下所示:stackoverflow.com/a/51587449/878126
    猜你喜欢
    • 1970-01-01
    • 2017-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-30
    • 1970-01-01
    • 2020-11-29
    • 2014-08-02
    相关资源
    最近更新 更多