安卓Room学习:数据库版本管理、数据迁移

版本更改

@Entity
public class Word {
    @PrimaryKey(autoGenerate = true)
    private int id;

    @ColumnInfo(name = "english")
    private String word;
    private String chinese;

    @ColumnInfo(name = "foo_data")
    private boolean foo;
}

在原先的数据库实体类之上添加一个元素,此时不进行其他更改直接运行将会报错。

那么就需要更改两个位置:
数据库版本号version

@Database(entities = {Word.class}, version = 2, exportSchema = false)
public abstract class WordDataBase extends RoomDatabase {
}

数据迁移策略

instance = Room.databaseBuilder(context.getApplicationContext(), WordDataBase.class, "word_database")
        .fallbackToDestructiveMigration()
        .build();

fallbackToDestructiveMigration()表示抹去数据库所有内容,使用新的数据库(全空)
addMigrations(MIGRATION_2_3)手动创建迁移策略

    static final Migration MIGRATION_2_3 = new Migration(2, 3) {
        @Override
        public void migrate(@NonNull SupportSQLiteDatabase database) {
            database.execSQL("ALTER TABLE word ADD COLUMN bar_data INTEGER NOT NULL DEFAULT 1");  //添加行
        }
    };

有添加行但是没有删除行的对应函数,所以删除行操作麻烦一些。

    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 TEXT," +
                    "chinese TEXT)");
            database.execSQL("INSERT INTO word_temp (id, english, chinese) " +
                    "SELECT id, english, chinese FROM word");
            database.execSQL("DROP TABLE word");
            database.execSQL("ALTER TABLE word_temp RENAME TO word");
        }
    };

参数表示版本迁移变化,使用SQL语句进行数据迁移

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

魔幻音

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值