Android---Room(三)

当表的结构发生变化时处理方法:

下面方法共同点就是版本号+1


最简单的方法就是在数据库创建时,执行破坏式的迁移

.fallbackToDestructiveMigration()//破坏式迁移
INSTANCE= Room.databaseBuilder(context.getApplicationContext(),WordDatabase.class,"word database")
               .fallbackToDestructiveMigration()//破坏式迁移
               .build();

这样带来的后果就是数据都会被删除。


还有一种方式式保留数据增加表列的方式:

.addMigrations(XXXXXX)

例子:
当我们bean类添加新的成员变量:

    @ColumnInfo(name="bar_data")
    private boolean bar;
INSTANCE= Room.databaseBuilder(context.getApplicationContext(),WordDatabase.class,"word database")
                    .addMigrations(MIGRATION)
                    .build();


   static final Migration MIGRATION=new Migration(2,3) {//从版本2到版本3
        @Override
        public void migrate(@NonNull SupportSQLiteDatabase database) {
            database.execSQL("Alter table word add column bar_data INTEGER not null default 1");
        }
    };

如果是表列减少时,需要在保存数据的情况下。在sqlite中只能创建新的表进行迁移,保留需要的表列。

   static final Migration MIGRATION_3_4=new Migration(3,4) {
        @Override
        public void migrate(@NonNull SupportSQLiteDatabase database) {
            database.execSQL("Create table word_temp(id Integer primary key not null,english_word TEXT,chinese_meaning TEXT)");
            database.execSQL("Insert into word_temp(id,english_word,chinese_meaning) select id,english_word,chinese_meaning from word");
            database.execSQL("drop table word");
            database.execSQL("Alter table word_temp rename to word");
        }
    };
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值