文档章节

ios实战-数据库更新升级方案

余成海
 余成海
发布于 2015/04/28 17:17
字数 262
阅读 7114
收藏 10

我们常使用fmdb或者其他方式创建sqlite数据库,但是由于版本迭代问题,常常有需求要更新数据库,比如加字段、删除、修改字段等等,怎么样才能升级数据库且保持原来存的数据有效呢,上代码:

const static NSInteger FAMILY_LIST_DB_MANAGER_VER = 1;

@implementation KSFamilyListDBManager
{
    DBManager *_dbMgr;
}

+ (instancetype)sharedManager
{
    static KSFamilyListDBManager *s_instance = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        s_instance = [[KSFamilyListDBManager alloc] init];
    });
    return s_instance;
}

- (id)init {
    self = [super init];
    if (self) {
        _dbMgr = [DBManager defaultMgr];
        
        [self createTables];
        
        // 升级操作
        NSInteger ver = [[ConfigDBManager sharedManager] familyListDBManagerVersion];
        if (ver < 1) {
            [[ConfigDBManager sharedManager] setFamilyListDBManagerVersion:FAMILY_LIST_DB_MANAGER_VER];
        } else if (ver < FAMILY_LIST_DB_MANAGER_VER) {
            [self upgrade];
        }
    }
    return self;
}

- (void)upgrade {
    //获取存储好的原版本号
    NSInteger oldVersionNum = [[ConfigDBManager sharedManager] familyListDBManagerVersion];
    if (FAMILY_LIST_DB_MANAGER_VER <= oldVersionNum || oldVersionNum == 0) {
        return;
    }
    
    //升级
    [self upgrade:oldVersionNum];
    
    // 保存新的版本号到库中 -这里大家可以使用NSUserDefault存储
    [[ConfigDBManager sharedManager] setFamilyListDBManagerVersion:FAMILY_LIST_DB_MANAGER_VER];
}

- (void)upgrade:(NSInteger)oldVersion {
    if (oldVersion >= FAMILY_LIST_DB_MANAGER_VER) {
        return;
    }
    switch (oldVersion) {
        case 0:
            break;
        case 1:
            [self upgradeFrom1To2];
            break;
        case 2:
            break;
        default:
            break;
    }
    oldVersion ++;
    
    // 递归判断是否需要升级
    [self upgrade:oldVersion];
}

- (void)upgradeFrom1To2 {
    //这里执行Sql语句 执行版本1到版本2的更新
}


© 著作权归作者所有

余成海
粉丝 62
博文 57
码字总数 29577
作品 0
杭州
iOS工程师
私信 提问
一篇文章get微信开源移动端数据库组件WCDB的一切!

1、前言 微信团队已于2017年06月09日正式开源了微信自用的移动端数据库组件 WCDB(WeChat Database),详见《[资讯] 微信正式开源移动端数据库组件WCDB!》。 WCDB是微信终端的第三个开源项目...

jsjsjjs
2017/07/22
0
0
【线下活动】深圳 iOSer Meetup —— 让 iOS 更有意思

8 月27日,BearyChat 和极光,「T」社区的小伙伴,一起为大家准备了一场专注于 iOS 相关技术的小型开发者交流活动,在本次「深圳 iOSer Meetup」中,除了三位嘉宾会和大家分享一些干货之外,...

极光推送
2016/08/23
561
1
深圳 iOSer Meetup —— 让 iOS 更有意思

  8 月27日,BearyChat 和极光,「T」社区的小伙伴,一起为大家准备了一场专注于 iOS 相关技术的小型开发者交流活动,在本次「深圳 iOSer Meetup」中,除了三位嘉宾会和大家分享一些干货之...

极光推送
2016/08/17
276
0
深圳 iOSer Meetup —— 让 iOS 更有意思

  8 月27日,BearyChat 和极光,「T」社区的小伙伴,一起为大家准备了一场专注于 iOS 相关技术的小型开发者交流活动,在本次「深圳 iOSer Meetup」中,除了三位嘉宾会和大家分享一些干货之...

极光推送
2016/08/17
8
0
iOS开发笔记(九)— 数据库、Crash、内存问题分析

前言 分享iOS开发中遇到的问题,和相关的一些思考,本次内容包括:UIKit的iOS11问题、数据库问题定位、线上Crash处理、内存问题分析。 正文 1、iOS 11的UITabbar的高度异常 问题描述:iOS 1...

落影loyinglin
2018/08/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

无回路有向图的拓扑排序

因公司业务需要,在表单中每个字段都会配置自动计算,但自动计算公式中会引用到其他字段中的值。所以希望可以根据计算公式,优先计算引用的公式。所以最终使用了无回路有向图的扩扑排序来实现...

兜兜毛毛
今天
6
0
如何抢占云栖大会C位?史上最强强强攻略来了

点击观看视频: APSARA云栖大会开发者情怀 原文链接 本文为云栖社区原创内容,未经允许不得转载。

阿里云官方博客
今天
6
0
Kubernetes 从懵圈到熟练:集群服务的三个要点和一种实现

作者 | 声东 阿里云售后技术专家 文章来源:Docker,点击查看原文。 以我的经验来讲,理解 Kubernetes 集群服务的概念,是比较不容易的一件事情。尤其是当我们基于似是而非的理解,去排查服务...

阿里巴巴云原生
今天
11
0
PHP7.3的新特性

2018年12月6日,PHP7.3正式版发布,在PHP7.2基础上进行了大量错误修复和安全优化,性能提升10%! 从目前的更新说明来看,PHP 7.3 并不是一个主打新特性的版本,包含更多的是 bug 修复。PHP 7...

迅睿CMS-PHP开源CMS程序
今天
8
0
Tomcat 应用中并行流带来的类加载问题

本文首发于 vivo互联网技术 微信公众号 链接:https://mp.weixin.qq.com/s/f-X3n9cvDyU5f5NYH6mhxQ 作者:肖铭轩、王道环 随着 Java8 的不断流行,越来越多的开发人员使用并行流(parallel)...

vivo互联网技术
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部