FMDB数据库升级——增加表字段

转载自:  https://www.jianshu.com/p/124a2e4e8c42

前言

升级数据库是个很繁琐看似很麻烦的事情,有次面试,面试官问了关于增加字段更新数据库升级的问题,我是这么回答的,我说可以做一个数据库迁移拷贝
,每次更新版本判断一下,面试官表示很不解,为什么要这么复杂化,重复问了好几次,也许在等我更好的答案;

需要在已经存在的表里面新增一个或者多个字段,思路应该是这样的;
先去判断增加的字段是否存在,不存在就去插入:

1
#import "FMDatabaseAdditions.h" // 导入头文件

// 判断
if (![db columnExists:@"需要增加的字段" inTableWithName:@"表名"]){  
          
} 
2

如果不存在,就执行插入操作:

NSString *alertStr = [NSString stringWithFormat:@"ALTER TABLE %@ ADD %@ INTEGER",@"表名",@"新增字段"];  
BOOL worked = [db executeUpdate:alertStr];  
if(worked){
    NSLog(@"插入成功");
}else{
    NSLog(@"插入失败");
}
3

升级顺序如下:

// 获得Documents目录路径
    NSString *documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
    // 文件路径
    NSString *sqlitePath = [NSString stringWithFormat:@"MLChatDataBase%@.sqlite", [MLSettingTool objectForKey:ML_UserId]];
    NSString *filePath = [documentsPath stringByAppendingPathComponent:sqlitePath];

// 实例化FMDataBase对象
    _db = [FMDatabase databaseWithPath:filePath];
    [_db open];
    // 初始化数据表
    NSString *userInfoSql = @"CREATE TABLE IF NOT EXISTS UserInfoData (userId VARCHAR(255) PRIMARY KEY NOT NULL, realName VARCHAR(255),headImg VARCHAR(255),mobile VARCHAR(255))";
    [_db executeUpdate:userInfoSql];

// 判断是否包含表字段
      if (![db columnExists:@"age" inTableWithName:@"UserInfoData"]){  
          NSString *alertStr = [NSString stringWithFormat:@"ALTER TABLE %@ ADD %@ INTEGER",@"UserInfoData",@"age"];  
          BOOL worked = [db executeUpdate:alertStr];  
          if(worked){
                 NSLog(@"插入成功");
          }else{
                  NSLog(@"插入失败");
          }
          } 

     [_db close];


作者:玛丽_
链接:https://www.jianshu.com/p/124a2e4e8c42
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

你可能感兴趣的:(FMDB数据库升级——增加表字段)