我正在尝试重命名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;");
}
};
我按照以下语法图进行查询:
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.
版本号是正确的,因此我假设此问题是由上述语法问题引起的;我的设置找不到其他问题。
答案 0 :(得分:1)
Android使用SQLite v3.19。这样就无法使用RENAME COLUMN重命名列。最好的方法是重新创建表格。 – Leo Pelozo
好像我需要创建删除表的函数,以便创建新表。
@Query("DELETE FROM items")
void dropTable();
...然后再次创建表,尽管我不确定如何执行此操作。
更新:
我能够(我想,我们会看到...)通过调用上述函数,删除所有迁移并将数据库版本设置回1来重新创建表。然后我重新定义了数据库类本身具有适当的名称等,并且能够将数据插入其中而没有任何错误。将.fallbackToDestructiveMigration()
添加到我的数据库单例类中也是必要的。
我个人认为,仅重新命名一个列就有点荒谬了。我从来不能简单地重命名该列并为更改添加迁移,也无法删除该表并使用正确的列名重新创建并将其添加为迁移。但是a,毕竟这是Android。