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

标签 android sqlite syntax migration rename

我正在迁移我的 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

最佳答案

重命名关键字在 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_tmp(<column1>, <column2>,..) 
    SELECT <column1>, <column1>, ... 
    FROM item;

3.删除表格项

DROP TABLE item;

4.重命名item_tmp表

ALTER TABLE item_tmp RENAME TO item;

关于android - 重命名列名时 SQLITE 语法错误代码 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62269319/

相关文章:

android - Android 中如何获取当前时间和日期

java - 请求路由到主机 android

java - 使用 JODA 库的两个日期之间的差异

php - 在 SQL 查询、PHP 中添加变量和常量的简短语法

sql - Vertica/SQL,Case When 语法

java - 如何使用 Java 中的 AnyChart for Android 创建 BubbleMap

sql - 如何选择集合中最后一个非 NULL 列

swift - 无法将 SQLite 集成到 Vapor 项目中

mysql - 比较多个Mysql表以查找修改的记录

ios - Swift FMDB 代码说明