Room数据库版本升级

Room数据库版本升级

当开发中使用了Google的Room框架的话,当你在之后的版本中新增了表或者改动了某些表结构的话,你就需要对数据库的版本号进行相应的更新,现在整理两种更新方式:

作死型方式

之所以叫作死型方式就是这种方式会清空数据库中的数据,所以要使用这种方式之前一定要慎重考虑。
如果你不想写Migration的相关代码,那么你就用下面的方式:

@Database(entities = {User.class}, version = 3)
public abstract class UsersDatabase extends RoomDatabase

database = Room.databaseBuilder(context.getApplicationContext(),
                        UsersDatabase.class, "Sample.db")
                 //添加下面这一行
                .fallbackToDestructiveMigration()
                .build();

fallbackToDestructiveMigration这行代码所做的操作:

  1. 所有表都会被丢弃,同时 identity_hash 被插入

正确姿势

  1. 修改数据库版本号

@Database(entities = {User.class}, version = 2)
public abstract class UsersDatabase extends RoomDatabase
  1. 创建Migration,1和2分别代表上一个版本和新的版本

static final Migration MIGRATION_1_2 = new Migration(1, 2) {
    @Override
    public void migrate(SupportSQLiteDatabase database) {
      //此处对于数据库中的所有更新都需要写下面的代码
        database.execSQL("ALTER TABLE users "
                + " ADD COLUMN last_update INTEGER");
    }
};
  1. 把migration 添加到 Room database builder

database = Room.databaseBuilder(context.getApplicationContext(),
        UsersDatabase.class, "Sample.db")
         //增加下面这一行
        .addMigrations(MIGRATION_1_2)
        .build();

说明:SQLite的ALTER TABLE命令非常局限,只支持重命名表以及添加新的字段。


链接:https://www.jianshu.com/p/fae0245cf384

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值