Room数据库迁移

4 篇文章 0 订阅
3 篇文章 0 订阅

升级数据库版本时,为了迁移已有的用户数据,要定义版本之间的迁移路径,如1->2

val MIGRATION_1_2: Migration = object: Migration(1, 2) {
    override fun migrate(database: SupportSQLiteDatabase) {
        //增加表字段
        database.execSQL("ALTER TABLE pay "
                + "ADD COLUMN discount TEXT NOT NULL DEFAULT '1'")
        //新建表
        database.execSQL("CREATE TABLE `apay` (`id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, " +
                "`bill_code` TEXT NOT NULL" +
                ")")
    }
}

使用迁移路径:

@JvmStatic
 fun getInstance(context: Context): AppDatabase {
     if (mInstance == null) {
         synchronized(DatabaseHelper::class.java) {
             if (mInstance == null) {
                 mInstance = Room.databaseBuilder(
                     context,
                     AppDatabase::class.java,
                     DB_NAME
                 ).addMigrations(MIGRATION_21_22)
                     .fallbackToDestructiveMigration() //没有定义迁移路径的增量迁移时,直接删除旧版数据
                     .allowMainThreadQueries() //可以在主线程操作
                     .build()
             }
         }
     }
     return mInstance
 }

官方文档:迁移 Room 数据库

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值