1.使用的工具
国外程序员网站stackoverflow上面提供的MigrationHelper.java类做数据库升级。
说明:该类有点小bug,后面会介绍解决方案。
2.原理说明
1.应用程序启动的时候,根据需要升级的表创建新的临时表
2.将需要更新表的数据迁移到临时表中
3.删除更新前的表,重命名临时表
3.数据库升级(以下内容需要结合第一篇文章,greenDAO的使用详解---(1)greenDAO的配置和增删改查)
-
由于升级数据库需要在DevOpenHelper类的onUpgrade()方法里面继续,因此我们需要自定义一个类继承DevOpenHelper重写onUpgrade()方法
注意:在onUpgrade()方法中可以不调用父类的onUpgrade()方法,因为做数据库升级的时候已经在MigrationHelper中调用了父类的onUpgrade()方法中的内容
-
在初始化数据库的时候用自定义的MyDevOpenHelper类替换原来的DevOpenHelper类
-
修改在项目根目录build.gradle文件中配置的数据库版本号(新版本号一定要比老版本大)
-
在onUpgrade()方法调用数据库升级方法
migrate()方法说明:在我们保存数据库的bean对象中,有多少个bean对象的属性字段发生改变,我们就在改方法中传入改变的bean的Class
-
升级测试-在第一篇文章中创建的User类中新增加一个属性字段,测试数据保存情况。
- 其他相关说明
如果我们没有在onUpgrade()方法中调用数据库升级方法,而是直接调用父类onUpgrade()方法,用户安装我们的新版本应用时候,原来保存在数据库中的数据都没有,相当于我们删掉了原来的数据库,创建一个新数据库。
4.遗留问题(解决方案,请查看下一篇文章)
-
当我们测试升级的是,在User中增加一个int属性测试时。就会以下错误: