所以基本上我正在使用空间并尝试添加从数据库版本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()
答案 0 :(得分:5)
确保您的列在模型类中。在您的情况下,您要添加age
列,如下所示:ADD COLUMN 'age' INTEGER
,因此您必须在模型类中添加int age
。
此外,最好将迁移测试写入确切知道失败的内容。你可以在这里找到关于android文档中的迁移测试:https://developer.android.com/topic/libraries/architecture/room.html#db-migration-testing
答案 1 :(得分:0)
尝试在@Database内的AppDatabase中更改version = 2。