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


    我们常使用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的更新
    }
  • 相关阅读:
    致 CODING 用户的元宵问候
    持续集成之理论篇
    基于 CODING 的 Spring Boot 持续集成项目
    使用 CODING 进行 Hexo 项目的持续集成
    使用 CODING 进行 Spring Boot 项目的集成
    三种前端模块化规范
    XSS和CSRF
    小问题填坑,关于obj.x和obj["x"]
    说一个闭包在实际开发中的应用
    关于return的分号自动插入问题
  • 原文地址:https://www.cnblogs.com/zkzzkz/p/5711331.html
Copyright © 2020-2023  润新知