MicroKibaco / CrazyDailyQuestion

每日一问: 水滴石穿,聚沙成塔,坚持数月, 必有收获~
35 stars 1 forks source link

GreenDao如何对数据库进行升级? #69

Open MicroKibaco opened 4 years ago

MicroKibaco commented 4 years ago

以往的做法是:

  1. 数据库升级 需要我们自行处理,即继承OnUpgrade()。那这样就和以往SQLiteOpenHelper一样,需要判断版本号,然后写SQL进行新增字段或新增表。这样显然不好,我们就是不想写SQL的,而且版本号判断维护麻烦。

    现在的做法是:

  2. 添加依赖
dependencies {
    compile 'com.github.yuweiguocn:GreenDaoUpgradeHelper:v0.0.5'
}

2、继承DaoMaster.OpenHelper,自定义OnUpgrade()。

public class MySqlLiteOpenHelper extends DaoMaster.OpenHelper {
    public MySqlLiteOpenHelper(Context context, String name) {
        super(context, name);
    }

    @Override
    public void onUpgrade(Database db, int oldVersion, int newVersion) {
        MigrationHelper.migrate(db, PeopleDao.class, AnimalDao.class, BookDao.class);
    }
}
  1. 这一行代码的实现原理,实际就是以下思路。 在此基础上,可以保留原数据进行升级数据库。 (1)首先创建临时表(数据格式和原表一模一样)。 (2)把当前表的数据插入到临时表中去。 (3)删除掉原表,创建新表。 (4)把临时表数据插入到新表中去,然后删除临时表。 MigrationHelper的migrate方法