在本篇文章中主要是记录在android 开发中需要对sqlite数据库进行更新的一些实践与总结。希望在往后的开发中遇到同样的问题时能够帮助自己快速的回想起来。
简介
在android开发中我们一般都会需要不停的对应用进行优化更新升级,添加新功能也好,界面优化也好,或者bug修复也好,都需要持续的在不影响原有功能正常使用的情况下对app 进行迭代更新。如果我们的app 使用到sqlite数据库,那么掌握对sqlite数据库更新的技巧是非常有必要的,比如,新功能需要新增数据表记录数据,或者在原有功能上做拓展,需要数据库新增字段进行支持等等。
数据库升级分析
数据库升级大概就分为以下几种情形:
- 1.表的增加
- 2.表的删除
- 3.表的修改
- 3.1.字段增加
- 3.2.字段删除
通过图形示例,大致上,数据库的升级大概有以下几种情况, 有一个版本一个版本接着升级,也有跨版本升级的。
通常地,我们操作sqlite 数据库都需要继承 SQLiteOpenHelper 类并实现onCreate、onUpgrade
方法,它是sqlite 数据库的管理操作工具类,主要作用有 打开或者关闭sqlite 数据库、创建、增、删、改、版本更新。
实际开发中,数据库的创建是通过在子类构造方法调用父类的构造实现。示例代码如下:
1 |
|
首次安装
用户在第一次安装的时候会执行onCreate
方法,在该方法中,我们可以创建数据表
1 |
|
假设有最开始只有一个学生表 tb_student
, 作为第一个版本 V1
,只有几个字段,分别是 id、name、studentNo 这三个字段。
V1—>V2 升级
后面由于业务需要,应该记录学生地址信息,需要在表添加 address 字段。因此在升级APP的同时需要更新数据库的版本。此时会出现两种情况。
case1: V1->V2(旧版本更新到新版本)
由旧版本更新到最新版本, 此时在 SQLiteOpenHelper 的子类中,会执行
onUpgrade
方法,但不会执行onCreate
方法。case2: 新用户直接安装V2
新用户直接安装V2或者卸载后重新安装APP,会执行
onCreate
方法,不会执行onUpgrade
方法
在升级的过程中我们需要兼容这两种情况,那么改进后的代码如下:
1 |
|
V2->V3 升级
随着生产发展,业务需求也在不断的变化,对APP的提出更多要求时,我们需要实时地调整来服务好用户。比如需要记录用户的 年龄,性别信息是,这时我们的 tb_student
表需要添加 age、gender字段。而这时会出现三种情况。
- case1: 用户重装或者新用户安装
- case2: 用户由V1->V3
- case3: 用户由V2->V3
由此我们会发现随着版本的迭代次数增加,用户更新APP的的情况也会增加。为了兼顾各个版本,因此我们需要适当的对上面的代码进行调整。
1 |
|
通过 for 循环从最开始的版本遍历到最新的版本,然后 switch 指定每一个版本对应需要更新的内容,可以无遗漏的把每一个落后的版本更新到最新的版本,兼容了一个一个版本的迭代以及跨版本迭代的问题,此外,也兼顾了新安装即最新版本。