美文网首页
GreenDao 解决数据库升级

GreenDao 解决数据库升级

作者: 崽子猪 | 来源:发表于2019-06-05 11:17 被阅读0次

    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 解决数据库升级

          本文链接:https://www.haomeiwen.com/subject/stejxctx.html