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数据库加密结束
网友评论