A repository for the learning Room.
@Database([Word::class], version =3, exportSchema =false) //修改Entity后必须更新数据库版本abstractclassWordDatabase : RoomDatabase() {
abstractval wordDao:WordDaocompanionobject {
@Volatile
privatevarINSTANCE:WordDatabase?=nullfungetInstance(context:Context): WordDatabase {
synchronized(this) {
var instance =INSTANCEif (instance ==null) {
instance =Room.databaseBuilder(
context.applicationContext,
WordDatabase::class.java,
"word_database"
)
// .fallbackToDestructiveMigration() //破坏性地重建// .addMigrations(MIGRATION_2_3) //创建迁移策略
.build()
INSTANCE= instance
}
return instance
}
}
privatevalMIGRATION_1_2:Migration=Migration(1, 2) {
it.execSQL("ALTER TABLE word DROP COLUMN bar_data")
}
//数据库删除列 -> 新创建一个然后迁移数据privatevalMIGRATION_2_3:Migration=Migration(2, 3) {
// 创建一个新的临时表
it.execSQL(
"CREATE TABLE word_temp (id INTEGER PRIMARY KEY NOT NULL, english_word TEXT NOT NULL, chinese_meaning TEXT NOT NULL)"
)
// 复制旧表中的数据到新表
it.execSQL("INSERT INTO word_temp SELECT id, english_word, chinese_meaning FROM word")
// 删除旧表
it.execSQL("DROP TABLE word")
// 将新表重命名为旧表的名称
it.execSQL("ALTER TABLE word_temp RENAME TO word")
}
}
}