iOS SQLite迭代

*** 前提:sqlite较复杂的情况是沙盒中已经存在了sqlite文件,再进行sqlite升级,下文按照此种情况描述,sqlite升级写的有点绕,希望下面简单的思路对你有帮助! ***

方式一:文件名称排序比较 方式

思路:App版本号与sqlite版本NSUserDefaults字段(或与sqlite信息)进行对比判断。较适合sqlite升级非常频繁的时候 `

iOS SQLite迭代_第1张图片
方式一
  • 1.1 获取当前的App版本号 与 sqlite版本字段(或与sqlite信息)
iOS SQLite迭代_第2张图片
当前的App版本号
  • 1.2 按照如下规则进行sql迭代升级文件编辑

约定版本号时,如某一段中有多位数,需要用"0"补齐,如:2.3.05,最后一段"5"前需要补"0"(出现:2.2.3,2.3.10,需改成:2.2.03,2.3.10)

iOS SQLite迭代_第3张图片
更新的sql文件

  • 1.3 此次迭代后的App版本

在code中需要将原始版本号"2.1.20170510"转换为sql文件名格式"2_1_20170510"

iOS SQLite迭代_第4张图片
迭代后App版本号

  • 1.4 筛选出需要迭代升级的sql文件
iOS SQLite迭代_第5张图片
sql文件内容
  • 1.5 根据定义的符号分割sql语句,使用"事务"去更新sqlite

为了突出重点,这里偷了个懒,使用的是FMDB的事务API实现,按文件为单位更新sqlite,如果中间出现一条sql错误,将此文件所有的更新sql进行回滚

iOS SQLite迭代_第6张图片
事务更新sqlite

  • 1.6 更新完成 将App版本号写入本地sqlite对应NSUserDefaults字段中

此处用的是NSUserDefaults方式存储,更新成功后:本地的sqlite对应的版本字段 === App当前版本

iOS SQLite迭代_第7张图片
写入NSUserDefaults中

方式二:switch-break 方式

*** 不同的核心代码如下图,为了清晰明了,code没有进行封装 ***
思路:更新当前版本号开始升级,从低往高升。较适合sqlite升级不频繁的时候

iOS SQLite迭代_第8张图片
方式二
附参考DEMO

你可能感兴趣的:(iOS SQLite迭代)