2017-10-11 27 views
0

所以基本上我使用空间,并试图从数据库版本1添加迁移到2,但我的改变命令不工作 我目前的实施如下:房间迁移改变表不添加新列和迁移一次又一次调用

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()

回答

1

确保您的列在模型类中。在你的情况下,你正在添加如下的列ageADD COLUMN 'age' INTEGER,所以你的模型类中必须有int age

此外,编写迁移测试以确切知道失败的是一个好主意。你可以在Android文档中找到关于迁移测试的地方:https://developer.android.com/topic/libraries/architecture/room.html#db-migration-testing

+0

我已经接受了答案,但它部分解决了我的问题。我会更新我的答案,并添加什么解决我 – Gautam

+0

哪里的更新? @Gautam – olu