greenDAO的使用详解---(2)greenDAO3.2.2数据库的升级

greenDAO的使用详解—(2)greenDAO3.2.2数据库的升级

1.使用的工具

国外程序员网站stackoverflow上面提供的MigrationHelper.java类做数据库升级。
说明:该类有点小bug,后面会介绍解决方案。

2.原理说明

1.应用程序启动的时候,根据需要升级的表创建新的临时表
2.将需要更新表的数据迁移到临时表中
3.删除更新前的表,重命名临时表

3.数据库升级(以下内容需要结合第一篇文章,greenDAO的使用详解—(1)greenDAO的配置和增删改查)

  1. 由于升级数据库需要在DevOpenHelper类的onUpgrade()方法里面继续,因此我们需要自定义一个类继承DevOpenHelper重写onUpgrade()方法
    greenDAO的使用详解---(2)greenDAO3.2.2数据库的升级_第1张图片
    注意:在onUpgrade()方法中可以不调用父类的onUpgrade()方法,因为做数据库升级的时候已经在MigrationHelper中调用了父类的onUpgrade()方法中的内容
  2. 在初始化数据库的时候用自定义的MyDevOpenHelper类替换原来的DevOpenHelper类
    greenDAO的使用详解---(2)greenDAO3.2.2数据库的升级_第2张图片
  3. 修改在项目根目录build.gradle文件中配置的数据库版本号(新版本号一定要比老版本大)
    greenDAO的使用详解---(2)greenDAO3.2.2数据库的升级_第3张图片
  4. 在onUpgrade()方法调用数据库升级方法
    greenDAO的使用详解---(2)greenDAO3.2.2数据库的升级_第4张图片
    migrate()方法说明:在我们保存数据库的bean对象中,有多少个bean对象的属性字段发生改变,我们就在改方法中传入改变的bean的Class
  5. 升级测试-在第一篇文章中创建的User类中新增加一个属性字段,测试数据保存情况。
    greenDAO的使用详解---(2)greenDAO3.2.2数据库的升级_第5张图片
  6. 其他相关说明
    如果我们没有在onUpgrade()方法中调用数据库升级方法,而是直接调用父类onUpgrade()方法,用户安装我们的新版本应用时候,原来保存在数据库中的数据都没有,相当于我们删掉了原来的数据库,创建一个新数据库。

4.遗留问题(解决方案,请查看下一篇文章)

  1. 当我们测试升级的是,在User中增加一个int属性测试时。就会以下错误:
    greenDAO的使用详解---(2)greenDAO3.2.2数据库的升级_第6张图片

5.代码下载地址

源码下载,请点击这里

你可能感兴趣的:(android)