數據庫框架Room4 實現數據庫版本遷移

1. 在entity中新增字段

@ColumnInfo
private boolean foo_data;

public boolean isFoo_data() {
    return foo_data;
}

public void setFoo_data(boolean foo_data) {
    this.foo_data = foo_data;
}

 

2. 修改wordDatabase類

1. 修改註釋的版本

2. 添加一個migration類

3. 在構造器構造database時註冊migration

@Database(entities = {Word.class}, version = 3,exportSchema = false)
public abstract class WordDatabase extends RoomDatabase {

    private static volatile WordDatabase instance = null;

    static WordDatabase getInstance(Context context){
        if (instance == null) {
            synchronized (WordDatabase.class) {
                if (instance == null) {
                    instance = Room.databaseBuilder(context.getApplicationContext(), WordDatabase.class, "word_database")
                            //.fallbackToDestructiveMigration()  //強制遷移,銷燬之前數據
                            .addMigrations(MIGRATION_1_2)
                            .addMigrations(MIGRATION_2_3)
                            .build();
                }
            }
        }
        return instance;
    }

    public abstract WordDao getWordDao();

    private static final Migration MIGRATION_1_2 = new Migration(1,2) {
        @Override
        public void migrate(@NonNull SupportSQLiteDatabase database) {
            database.execSQL("alter table word add column foo_data integer not null default 1");
        }
    };

    private static final Migration MIGRATION_2_3 = new Migration(2,3) {
        @Override
        public void migrate(@NonNull SupportSQLiteDatabase database) {
            database.execSQL("create table word_temp (id integer primary key not null, " +
                    "word text, chinese_meaning text)");
            database.execSQL("insert into word_temp (id, word, chinese_meaning) " +
                    "select id, word, chinese_meaning from word");
            database.execSQL("drop table word");
            database.execSQL("alter table word_temp rename to word");
        }
    };
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章