*** 前提:sqlite较复杂的情况是沙盒中已经存在了sqlite文件,再进行sqlite升级,下文按照此种情况描述,sqlite升级写的有点绕,希望下面简单的思路对你有帮助! ***
方式一:文件名称排序比较 方式
思路:App版本号与sqlite版本NSUserDefaults字段(或与sqlite信息)
进行对比判断。较适合sqlite升级非常频繁的时候 `
-
1.1 获取当前的App版本号 与 sqlite版本字段(或与sqlite信息)
-
1.2 按照如下规则进行sql迭代升级文件编辑
约定版本号时,如某一段中有多位数,需要用"0"补齐,如:2.3.05,最后一段"5"前需要补"0"(出现:2.2.3,2.3.10,需改成:2.2.03,2.3.10)
-
1.3 此次迭代后的App版本
在code中需要将原始版本号"2.1.20170510"转换为sql文件名格式"2_1_20170510"
-
1.4 筛选出需要迭代升级的sql文件
-
1.5 根据定义的符号分割sql语句,使用"事务"去更新sqlite
为了突出重点,这里偷了个懒,使用的是FMDB的事务API实现,按文件为单位更新sqlite,如果中间出现一条sql错误,将此文件所有的更新sql进行回滚
-
1.6 更新完成 将App版本号写入本地sqlite对应NSUserDefaults字段中
此处用的是NSUserDefaults方式存储,更新成功后:本地的sqlite对应的版本字段 === App当前版本
方式二:switch-break 方式
*** 不同的核心代码如下图,为了清晰明了,code没有进行封装 ***
思路:更新当前版本号开始升级,从低往高升。较适合sqlite升级不频繁的时候