gpt4 book ai didi

android - 房间迁移更改表不添加新列并迁移一次又一次地被调用

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:44:18 24 4
gpt4 key购买 nike

所以基本上我正在使用 room 并尝试添加从数据库版本 1 到 2 的迁移,但我的 alter 命令不起作用我当前的实现如下:

 void init() {
db = Room.databaseBuilder(Global.getInstance(),
AppDatabase.class, "feed").addMigrations(MIGRATION_1_2).build();
}

迁移属性:

static final Migration MIGRATION_1_2 = new Migration(1,2) {
@Override
public void migrate(SupportSQLiteDatabase database) {


database.execSQL("ALTER TABLE 'post' ADD COLUMN 'age' INTEGER NOT NULL DEFAULT 0");
Log.d("VROM","Migration");
}
};

数据库实现:

@Database(entities = {Feed.class, DownloadModel.class}, version = 1) public abstract class AppDatabase extends RoomDatabase {
public abstract DaoAccess getFeedDao();}

所以在将版本从 1 增加到 2 之后,execSQL() 被执行,但新列没有添加到我的数据库中。我已经从 app 目录中拉出我的数据库并检查了多次,但列不存在。除此之外,如果我终止我的应用程序并再次启动它,将再次调用 migrate 方法,不知道这是否是预期的功能,但它会破坏我的功能。我认为 migrate 将只是调用一次与 onUpgrade()

相同

最佳答案

确保您的列在模型类中。在您的情况下,您要像这样添加列 age:ADD COLUMN 'age' INTEGER,因此您的模型类中必须有 int age .

此外,编写迁移测试以确切知道失败的原因是个好主意。您可以在此处的 android 文档中找到有关迁移测试的信息:https://developer.android.com/topic/libraries/architecture/room.html#db-migration-testing

关于android - 房间迁移更改表不添加新列并迁移一次又一次地被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46687160/

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