CrazyDailyQuestion
CrazyDailyQuestion copied to clipboard
GreenDao如何对数据库进行升级?
以往的做法是:
- 数据库升级 需要我们自行处理,即继承OnUpgrade()。那这样就和以往SQLiteOpenHelper一样,需要判断版本号,然后写SQL进行新增字段或新增表。这样显然不好,我们就是不想写SQL的,而且版本号判断维护麻烦。
现在的做法是:
- 添加依赖
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)首先创建临时表(数据格式和原表一模一样)。 (2)把当前表的数据插入到临时表中去。 (3)删除掉原表,创建新表。 (4)把临时表数据插入到新表中去,然后删除临时表。 MigrationHelper的migrate方法