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的更新
}
时间: 2024-10-30 23:53:15

ios 数据库更新升级方案的相关文章

Android数据库无缝升级方案

软件迭代过程中,业务不断更新,也要求软件持续更新.相应地,数据库更新升级也是不可避免的一个环节.Android作为客户端应用,数据库升级相对于服务端来说会麻烦一些.常见的升级方式有: 1.删除旧表和数据,创建新表.优点是简单方便,缺点是丢失了旧数据.适用于应用数据依赖度低的情况. 2.在代码中兼容处理各版本数据库,创建新表,迁移旧数据到新表.优点是保留了旧数据,缺点是需要处理兼容个版本数据库差异,比较麻烦.如果通过代码来记录维护版本差异,会导致代码臃肿且极易出错. 本文介绍一种简单无缝的数据库升

iOS 数据库升级 如何进行操作?

在iOS开发中,经常会遇到数据库升级,修改删除表的某些字段,这就需要我们来进行处理了,下面分析两种数据库的升级处理问题! 1.比如:我们常使用fmdb或者其他方式创建sqlite数据库,但是由于版本迭代问题,常常有需求要更新数据库,比如加字段.删除.修改字段等等,怎么样才能升级数据库且保持原来存的数据有效呢,上代码: const static NSInteger FAMILY_LIST_DB_MANAGER_VER = 1; @implementation KSFamilyListDBManag

iOS 数据库升级

分享一段ios数据库代码.包括创建.升级.增删查改. 里面的那些类不必细究,主要是数据库的代码100%可用. 数据库升级部分,使用switch,没有break,低版本一次向高版本修改. // DB.h //iukey #import #import "sqlite3.h" #import "User.h" #import "ChatInfo.h" #import "DescInfo.h" @interface DBHelper

iOS项目更新之升级Xcode7 & iOS9

前言      Apple 的WWDC所发布内容在给大家带来惊喜之际,给各位iOS开发的同仁却也带来了不同程度的麻烦.首先不讲新功能,就单指原来老版本的项目升级.代码升级,就是一堆问题,而且是不得不面临的问题.下面就跟着笔者一起来回顾下,此次在项目升级过程中,所遇到的各个问题点,以及解决方案,与各位已经做过和正在做iOS代码升级的同仁共勉,也给各位将要做Xcode 7和iOS9兼容的同仁以参考. 开发环境安装 原本运行得好好的项目,要升级Xcode7,首先就得安装Xcode7,具体的可以从开发者

打造android ORM框架opendroid(七)——数据库升级方案

在上一篇博客<打造android ORM框架opendroid(六)--级联查询>我们讲了OpenDroid最后一块功能查询的实现原理.今天我们将进行OpenDroid一个重头戏,也是本系列博客的最后一篇--数据库升级方案. 说道数据库升级,我可是很头疼的, 为什么呢? 因为以前的项目中,根本没有考虑数据库升级方案的问题,就直接drop table了,这样导致的结果就是"以前的数据都消失了".额... 凭空消失确实不是很少的一件事,如果数据不重要还行,重要数据呢? 说消失就

一劳永逸的数据库升级方案

数据库升级方案 一.面临的问题 在项目中数据库升级是经常遇到的事情,这个工作比较繁琐,特别是在线数据库升级需要十分小心,我们先来看一下通常面临的问题: 1.    表修改,包括增加了字段.修改了字段类型或者长度,更换了主键等.对于表的升级不能删除重建,需要单独修改,或者写脚本来升级. 2.    视图的修改,视图的修改比较简单,无非是增加了字段,取消了字段,不影响基础数据.视图的升级可以删除重建. 3.    存储过程的修改,存储过程的修改和视图一样,可以删除重建,二者都可以通过脚本来完成. 4

SEP迁移升级方案

方案一.灾难恢复后升级 实施前提条件:更换服务器系统/重装服务器系统,但保持主机名和IP地址不变. 实施步骤: 1.先备份原有SEPM服务器数据库 1.1到文件夹C:/program files/Symantec /Symantec endpoint protection manager/data/backup下检查是否有下面三个文件keystoreXXX.jsk,serverxxx.xml,及xxx.zip文件,xxx为当日日期.将此三分文件拷贝到其他位置备用. 2.在新的服务器上安装SEPM

微软ASP.NET站点部署指南(11):部署SQL Server数据库更新

1. 综述 本章节展示的是如何向完整版SQL Server 数据库部署一个数据库升级.与第9章的数据库升级部署有所不同(第9章是部署到SQL Server Compact数据库). 提醒:如果根据本章节所做的操作出现错误信息或一些功能不正常的话,请务必check Troubleshooting页面. 2. 给表添加新列 这个小节,做一个数据库修改和相应的代码更新,在部署到测试和生产环境之前,先在Visual Studio 里测试.修改内容是给Instructor 实体添加一个OfficeHour

讨论数据库的升级(10gR2至11gR2)

今天对数据库升级做了大致了解,还是很多东西值得考虑的. 首先,升级前的准备就很多工作需要做: 1. 测试和准备, 主要是应用的做压力测试.因为版本升级,优化器可能使SQL性能回退(选择性能更差的执行计划),可以结合database replay做压力测试,SPA模拟环境变化的影响,以及SPM对执行计划做固定. 2. 升级的方法, 主要是图形界面DBUA(新目录的路径)来完成,相对简单:手工升级(手工执行脚本.DBUA只不过将这些手工动作代替而已.新目录路径):EXPDP(源库路径)/IMPDP(