gpt4 book ai didi

Android Room,SQLite - 出乎意料,得到了 'COLUMN'

转载 作者:行者123 更新时间:2023-11-29 23:29:50 27 4
gpt4 key购买 nike

我正在尝试重命名我的 Room 数据库中的列。我傻傻的用了列名index,想改成id,但是这个迁移函数很头疼:

static final Migration MIGRATION_2_3 = new Migration(2, 3) {
@Override
public void migrate(@NonNull SupportSQLiteDatabase database) {
database.execSQL("ALTER TABLE items RENAME COLUMN index TO id;");
}
};

我按照以下语法图进行查询:

SQLite alter table syntax UML

Android Studio 给我错误 TO expected, got 'COLUMN',由于 RuntimeException,我无法使用数据库:

Caused by: java.lang.IllegalStateException: Room cannot verify the data integrity. Looks like you've changed schema but forgot to update the version number. You can simply fix this by increasing the version number.

版本号是正确的,所以我假设这个问题是由上面的语法问题引起的;我的设置找不到任何其他问题。

最佳答案

Android 使用 SQLite v3.19。这使得无法使用 RENAME COLUMN 重命名列。最好的方法是重新创建表。 – Leo Pelozo

看来我需要创建删除表格的函数,这样我才能创建一个新表格。

@Query("DELETE FROM items")
void dropTable();

...然后再次创建表,但我不确定如何去做。

更新:

我能够(我想,我们会看到...)通过调用上述函数重新创建表,删除所有迁移并将数据库版本设置回 1。然后我重新定义了数据库类本身具有专有名称等,并且能够毫无错误地将数据插入其中。添加 .fallbackToDestructiveMigration() 到我的数据库单例类也是必要的。

我个人认为仅仅重命名一个列有点荒谬;我永远无法简单地重命名列并为更改添加迁移,也无法删除表并使用正确的列名重新创建它并将其添加为迁移。但是,唉,这毕竟是 Android。

关于Android Room,SQLite - 出乎意料,得到了 'COLUMN',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52839661/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com