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



我正在我的安卓应用程序中迁移房间数据库。这是迁移代码:

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

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

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

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

2.将数据从项目复制到item_tmp

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

3.删除表项目

DROP TABLE item;

4.重命名item_tmp表

ALTER TABLE item_tmp RENAME TO item;

我在 Sqlite 中使用 RENAME 关键字时遇到了同样的问题。 它在低于Android 10的设备中给出错误,并在Android 11及更高版本中完美运行。

最新更新