上一篇数据库greenDAO的使用(二)介绍的数据库的基本操作,今天我们便介绍数据库升级的问题。
当我们的应用已投入使用,新版本中修改了表结构、或者增加了表,这时候我们就修改考虑数据库升级的问题了。
这是如果我们不修改数据库版本肯定会crash,但是仅仅只是修改版本的话是不行的。
查看DaoMaster代码发现
它竟然删除了所有的表,然后重新创建,这样数据肯定就没有了。因此我们需要自定义一个help来实现DaoMaster.OpenHelper(DaoMaster是自动生成的)
然后在GreenDaoManager类中修改init
这样就会使用我们自已的OpenHelpe类了,那么问题来了,怎么升级数据库。
首先我们需要一个临时数据库,将我们旧数据库备份到临时数据库中,然后删除旧数据库,建立新数据库,然后恢复临时库到新数据库中,最后删掉临时数据库。
说起来简单,怎么做呢?果断google,皇天不负有心人啊
stackoverflow上有人给出了解决方案http://stackoverflow.com/questions/13373170/greendao-schema-update-and-data-migration ,而且有人放到了github上面https://github.com/yuweiguocn/GreenDaoUpgradeHelper ,这样我们的问题就迎刃而解了。
因此我们需要修改我们的SQLiteOpenHelper,
假设我们1.0版本的实体类为
在2.0中我们添加注释及字段sex不在表中,并且增加了新的实体
这样新的数据库中应该有两张表并且User中添加了一个新的sex字段。
首先我们修改gradle的配置,将数据库的版本+1
然后我们修改SQLiteOpenHelper的方法
这样当有新版本的数据库时便执行onUpgrade方法实现数据库的升级。
现在我们就测试一下
首先我们第一版本中插一条数据
我们查看运行效果,导出数据库查看数据

现在我们升级数据库
首先看新的数据库中旧数据存在没有


可以看到升级成功旧数据还存在,并且数据库User表结构增加了sex字段,也添加了food表。
现在我们便可以愉快的操作新版了



是不是都成功了呢,这样我们升级数据库的大任就此结束了。
当然可能有人会问,如果我用真机该如何导出数据库呢,是有办法的,我们是可以修改数据库的位置的。
我们新建一个类
然后修改GreenDaoManager中init方法
当然我们不要忘记添加SD卡的读写权限,这样我们便可以在指定的目录下查看我们的数据库了。您可能会担心数据的安全问题,放在SD卡上不就可以人人查看了吗?不用担心,下期我们介绍greenDAO数据库的加密。