所以基本上我正在使用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()
执行该操作,但不会在数据库中添加新列。我已经从应用程序目录中拉了我的数据库,并检查了多次,但是列不存在。除此之外,如果我终止我的应用程序并再次启动它,则该migrate
方法会再次调用,不知道这是否是预期的功能,但它会破坏我的功能。我认为迁移将只被调用一次onUpgrade()
确保您的列在模型类中。对于您的情况,您要添加这样的列age
:ADD COLUMN 'age' INTEGER
,因此您必须int age
在模型类中。
同样,最好将迁移测试编写为确切知道失败的原因。您可以在以下Android文档中找到有关迁移测试的信息:https : //developer.android.com/topic/libraries/architecture/room.html#db-migration-testing
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句