美文网首页
数据库的版本升级

数据库的版本升级

作者: LeeDev | 来源:发表于2017-03-17 10:46 被阅读23次

原文链接

有四个步骤 (有个问题 就是 假设老版本是 v1,当前更新的版本是 v3,这个时候 还需要从 v1=》v2=》v3? 我觉得是不需要的,我觉的可以 直接 从 v1=》v3 这个版本,但是每个版本的字段我们是需要记录下来的 这样 就根据 不同的老版本 的数据 迁移到 最新版本中就可以了 ,下面写的例子 是参考的

  • 把原来结构的T 改名 TempT
  • 创建新版本数据结构的 表 T
  • 将 TempT 中的 数据 =》T中
  • 删除TempT 表

首先需要一个版本枚举

typedef NS_ENUM(NSInteger, DBVersion) {
    DBVersionV1,
    DBVersionV2,    //历史版本
    DBVersionV3,    //当前版本
};

static NSString *const DBVersionNum  = @"DBVersionNum";
static NSString *const dbPath = @"\tmp\tmp.db";     //数据库地址

static NSString *const createTable = @"create table if not exists  t1("
"id  integer PRIMARY KEY AUTOINCREMENT NOT NULL,"
"name char(50),"
"sex char(4),"
"recordDate  TIMESTAMP default (datetime('now', 'localtime')))";

- (instancetype)init{
    if (self = [super init]) {
        _queue = [FMDatabaseQueue databaseQueueWithPath:dbPath];
    }
    return self;
}
采用FMDatabaseQueue 进行数据库操作的管理。

/*
 *  需要初始化表结构时,调用此方法
 */
- (void)newDBVersionInit{
    if (![[NSUserDefaults standardUserDefaults] objectForKey:DBVersionNum]) {
        //系统之前没有数据库 新建立表。
        [self createTables];
    }else{
        DBVersion ver = [[[NSUserDefaults standardUserDefaults] objectForKey:DBVersionNum] integerValue];
        switch (ver) {
            case DBVersionV1:{
                [self v1ToV2];
            }
            case DBVersionV2:{
                [self v2Tov3];
            }
            case DBVersionV3:{

            }
                break;
            default:
                break;
        }
    }
}
/*
 *  创建新表
 */
- (void)createTables{
    [_queue inTransaction:^(FMDatabase *db, BOOL *rollback) {
        @try {
            [db executeUpdate:createTable];
        }
        @catch (NSException *exception) {
            *rollback = YES;
        }
    }];
    [[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithInteger:DBVersionV3] forKey:DBVersionNum];
}
把 DBVersionNum的值写为V3版本 方便下次对比。

/*
 *  版本1 向 版本2 数据迁移
 */
- (void)v1ToV2{

    [_queue inTransaction:^(FMDatabase *db, BOOL *rollback) {
        @try {

            //将原始表名T1 修改为 tempT1
            NSString *renameString = @"alter table t1 rename to tempT1";
            [db executeUpdate:renameString];

            //创建新表T1(V2版本的新表创建)
            [db executeUpdate:createTable];

            //迁移数据
            NSString *toString = @"insert into t1(name,sex)  select name,sex from tempT1";
            [db executeUpdate:toString];

            //删除tempT1临时表
            NSString *dropTableStr1 = @"drop table tempT1";
            [db executeUpdate:dropTableStr1];
        }
        @catch (NSException *exception) {
            *rollback = YES;
        }
    }] ;


    [[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithInteger:DBVersionV2] forKey:DBVersionNum];
}

相关文章

  • 2018-06-12 数据库的更新升级

    第一步: 我们升级数据库时第一步一般是升级数据库版本号:我之前使用的数据库版本号是6,所以我现在升级的版本号是: ...

  • GreenDao数据库升级

    GreenDao数据库升级 第1步:升级数据库版本号 第2步:修改数据库实体类 第3步:迁移数据库 注:数据库升级...

  • 关于Android数据库升级

    GreenDao数据库升级 第一步:升级数据库版本号首先存在着数据库 并且版本号只能高不能低 第2步:修改数据库...

  • SpringBoot+Flyway

    Flyway 数据库版本管理工具,支持数据库版本自动升级,支持多种数据库Oracle, SQL Server, S...

  • iOS数据库版本升级问题

    1.判断数据库版本号和保存数据库版本号 保存新版本号存储到NSUserDefaults中 2.数据库升级 // 获...

  • 备忘录

    1、修改过数据库的话一定要记得升级数据库版本

  • 数据库版本升级

    1.查看数据库的当前版本信息: 升级数据库到10.2版本 2.更新yum源 3.更新缓存 4.注:升级时勿必要备份...

  • fmdb数据库升级

    一、数据库升级背景:在老版本上开发的应用程序并未做数据库升级操作,以至于发布版本时候无法合并安装需要卸载重新安装本...

  • mysql5.6升级5.7

    升级方法比较简单 ,亲测有效 原数据库版本为mysql5.6.36 需升级到5.7.22版本 mysql5.6.3...

  • centos7升级RSYSLOG v8、安装LogAnalyze

    升级rsyslog centos7自带rsyslog的老版本,先升级 向mysql导入rsyslog数据库 配置r...

网友评论

      本文标题:数据库的版本升级

      本文链接:https://www.haomeiwen.com/subject/foxenttx.html