所以基本上我正在使用空间并尝试添加从数据库版本 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()
已执行,但新列未添加到我的数据库中。
我已从应用程序目录中提取数据库并检查多次,但列不存在。除此之外,如果我杀死我的应用程序并再次启动它migrate
方法被再次调用,不知道这是否是预期的功能,但它破坏了我的功能。我认为 migrate 只会被调用一次,与onUpgrade()
确保您的列属于模型类。在您的情况下,您要添加列age
像这样:ADD COLUMN 'age' INTEGER
,所以你必须有int age
在你的模型类中。
此外,编写迁移测试以准确了解失败的原因也是一个好主意。您可以在 android 文档中找到有关迁移测试的信息:https://developer.android.com/topic/libraries/architecture/room.html#db-migration-testing https://developer.android.com/topic/libraries/architecture/room.html#db-migration-testing
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)