Gau*_*tam 4 android android-sqlite android-room
所以基本上我正在使用空间并尝试添加从数据库版本1到2的迁移,但我的alter命令不起作用我的当前实现如下:
void init() {
db = Room.databaseBuilder(Global.getInstance(),
AppDatabase.class, "feed").addMigrations(MIGRATION_1_2).build();
}
Run Code Online (Sandbox Code Playgroud)
迁移属性:
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");
}
};
Run Code Online (Sandbox Code Playgroud)
数据库实施:
@Database(entities = {Feed.class, DownloadModel.class}, version = 1) public abstract class AppDatabase extends RoomDatabase {
public abstract DaoAccess getFeedDao();}
Run Code Online (Sandbox Code Playgroud)
因此,在将版本从1递增到2之后,execSQL()会执行,但我的数据库中未添加新列.我从app目录中取出了我的数据库并多次检查但是列不在那里.除此之外,如果我杀了我的应用程序再次启动它再次migrate调用该方法,不知道这是否是预期的功能,但它打破了我的功能.我认为迁移只会被调用一次onUpgrade()
确保您的列在模型类中.在您的情况下,您将添加age如下列:ADD COLUMN 'age' INTEGER,因此您必须具有int age模型类.
此外,最好将迁移测试编写为确切知道失败的原因.你可以在android文档中找到有关迁移测试的信息:https://developer.android.com/topic/libraries/architecture/room.html#db-migration-testing
| 归档时间: |
|
| 查看次数: |
5422 次 |
| 最近记录: |