GreenDao 解决数据库升级

IP地址:http://blog.csdn.net/ljy_programmer/article/details/78257528?locationNum=10&fps=1

github 源码地址:GreenDaoUpgradeHelper/MySQLiteOpenHelper.java at master · yuweiguocn/GreenDaoUpgradeHelper · GitHub

学习/参考地址: 

http://www.jianshu.com/p/4e6d72e7f57a 

http://blog.csdn.net/qq_30379689/article/details/54410838 

http://blog.csdn.net/shineflowers/article/details/53405644

前言

在以前选择数据库框架的时候,接触过GreenDAO,但由于那时的GreenDAO配置起来很繁琐,需要自己创建java库,所以就没使用它.

但如今在3.0版本后,GreenDAO大大简化了使用流程,加上其本身存取快、体积小、支持缓存、支持加密等优点,使得它成为了一个更受欢迎的ORM解决方案.


升级

在版本迭代时,我们经常需要对数据库进行升级,而GreenDAO默认的DaoMaster.DevOpenHelper在进行数据升级时,会把旧表删除,然后创建新表,并没有迁移旧数据到新表中,从而造成数据丢失.

这在实际中是不可取的,因此我们需要作出调整。下面介绍数据库升级的步骤与要点.

第一步

新建一个类,继承DaoMaster.DevOpenHelper.重写onUpgrade(Database db, int oldVersion, int newVersion)方法,在该方法中使用MigrationHelper进行数据库升级以及数据迁移.

网上有不少MigrationHelper的源码,这里采用的是https://github.com/yuweiguocn/GreenDaoUpgradeHelper中的MigrationHelper.它主要通过创建一个临时表,将旧表的数据迁移到新表中.

然后使用MyOpenHelper替代DaoMaster.DevOpenHelper来进行创建数据库等操作

第二步

在表实体中,调整其中的变量(表字段),一般就是新增/删除/修改字段。注意: 

1)新增的字段或修改的字段,其变量类型应使用基础数据类型的包装类,如使用Integer而不是int,避免升级过程中报错.

2)根据MigrationHelper中的代码,升级后,新增的字段和修改的字段,都会默认被赋予null值.

第三步

将原本自动生成的构造方法以及getter/setter方法删除,重新Build—>Make Project进行生成.

第四步

修改Module下build.gradle中数据库的版本号schemaVersion ,递增加1即可,最后运行app



混淆

# greenDAO开始

-keepclassmembersclass * extends org.greenrobot.greendao.AbstractDao {

public static java.lang.String TABLENAME;

}

-keepclass **$Properties

# If you do not use SQLCipher:

-dontwarn org.greenrobot.greendao.database.**

# If you do not use RxJava:

-dontwarn rx.**

# greenDAO结束

# 如果按照上面介绍的加入了数据库加密功能,则需添加一下配置

#sqlcipher数据库加密开始

-keepclass net.sqlcipher.** {*;}

-keepclass net.sqlcipher.database.** {*;}

#sqlcipher数据库加密结束

你可能感兴趣的:(GreenDao 解决数据库升级)