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");
}
};
}