iOS-App版本升级时数据库的迁移更新
2016-12-21 15:56
483 查看
在每一次运行程序的时候,判断是否存在数据库,如果不存在则直接创建数据库,若存在取出数据库版本号进行其他的处理.
,当用户第一次下载安装app的时候,第一次建立版本库,将我们的数据信息存入数据库中,同时保存一个当前版本号加一的字段到数据库中.
当用户更新app的时候,会直接从数据库中取出上一次保存的版本字段,例如是2.0版本的时候,会直接从case2开始执行,修改完数据结构以后,再一次将版本字段存到数据库中.
所以每更新一次版本,如果数据结构信息有变动的时候,直接在后面加case语句即可.
下面是一些参考代码,使用FMDB库:
使用的方法:
文/_轻舟(简书作者)
原文链接:http://www.jianshu.com/p/5e1b1ac6d224
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
,当用户第一次下载安装app的时候,第一次建立版本库,将我们的数据信息存入数据库中,同时保存一个当前版本号加一的字段到数据库中.
那么问题来了,为什么我们需要将版本信息加一呢,这是为了以后进行版本判断的时候更加方便. 还有一个问题,为什么我们将版本信息放入数据库而不使用UserDefaults快速存储呢?原因是你需要考虑到 当你的app有不同的用户登录时,UserDefaults是所有数据共享的,你不能根据不同的用户来处理他的信息 判段他的信息是否需要更新
当用户更新app的时候,会直接从数据库中取出上一次保存的版本字段,例如是2.0版本的时候,会直接从case2开始执行,修改完数据结构以后,再一次将版本字段存到数据库中.
所以每更新一次版本,如果数据结构信息有变动的时候,直接在后面加case语句即可.
下面是一些参考代码,使用FMDB库:
/** * 1.当没有数据库存在的时候,创建数据库 然后执行版本1的创建(创建版本表,创建信息表),保存1.0+1.0信息到版本库,数据库内版本号为2.0 2.当有数据库存在的时候,执行判断版本库的版本信息,版本号赋值给dbVersion,然后进行信息的更新,同时更新版本号的更新 */ -(instancetype)init { //设置数据库版本为1 int dbVersion = 1; if (self = [super init]) { //判断本地有没有数据库文件 if (![self isExistDB]) { //不存在 初始化数据库 [self createDB]; }else { //如果存在,那么获取版本信息 _dataBase = [[FMDatabase alloc] initWithPath:[self getDBPath]]; NSString * currentVersion = [self getDBInfoValue]; dbVersion = currentVersion.intValue; } switch (dbVersion) { //判断版本信息 case 1: { //说明用户第一次安装 1.0版本 //创建版本表 [self excuteLocalSql:createTB_info]; //创建信息表 [self excuteLocalSql:create_tusersql]; //保存1.0+1.0信息到数据库 用于下一次判断版本号 [self setDBInfoValueWithString:@"2.0"]; } case 2: { //更新信息表 [self excuteLocalSql:update_tusersql]; //保存2.0+1.0到数据库 [self setDBInfoValueWithString:@"3.0"]; } case 3: [self excuteLocalSql:modify]; [self setDBInfoValueWithString:@"4.0"]; default: break; } } return self; }
使用的方法:
//使用的SQL语句 static NSString *createTB_info=@"create table if not exists t_info (version text)"; static NSString *create_tusersql = @"CREATE TABLE IF NOT EXISTS T_User (userid INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, username TEXT, usergender TEXT, usercreatetime date, userupdatetime date,age INTEGER,islogined INTEGER)"; static NSString * update_tusersql = @"alter table T_User add column useraddress TEXT"; static NSString *modify=@"alter table T_User add column password text not null default '111111'"; //判断是否存在数据库 -(BOOL)isExistDB { NSFileManager *fileManager = [NSFileManager defaultManager]; return [fileManager fileExistsAtPath:[self getDBPath]]; } //得到路径 -(NSString *)getDBPath { return [NSString stringWithFormat:@"%@/Documents/user1.sqlite",NSHomeDirectory()]; } #pragma mark - 更新版本号 -(BOOL)updateVersionInfoWithString:(NSString *)version { NSString *sql = @"UPDATE t_info SET version = ?"; BOOL b = [_dataBase executeUpdate:sql,version]; return b; } #pragma mark - 插入版本号 -(BOOL)insertVersionInfoWithString:(NSString *)version { NSString *sql = @"INSERT INTO t_info(version) VALUES(?)"; BOOL b = [_dataBase executeUpdate:sql,version]; return b; } #pragma mark - 创建版本信息 - (BOOL)setDBInfoValueWithString:(NSString *)string { if ([self getDBInfoValue]) { //更新版本 [self updateVersionInfoWithString:string]; } else { //插入版本 [self insertVersionInfoWithString:string]; } return YES; } //得到版本信息 - (NSString *)getDBInfoValue { NSString *sql = @"select version from t_info"; //注意 需要先打开数据库 [_dataBase open]; FMResultSet *resultSet = [_dataBase executeQuery:sql]; NSString * version = nil; while ([resultSet next]) { version = [resultSet stringForColumn:@"version"]; } return version; } #pragma mark - 创建数据库中的表 - (BOOL)excuteLocalSql:(NSString *)createTB_info { BOOL b = [_dataBase executeUpdate:createTB_info]; NSLog(@"表的创建结果:%d",b); return b; } #pragma mark - 初始化数据库 - (void)createDB { _dataBase = [[FMDatabase alloc] initWithPath:[self getDBPath]]; if (_dataBase.open == YES) { NSLog(@"数据库成功创建!"); }else { NSLog(@"创建失败!"); } }
文/_轻舟(简书作者)
原文链接:http://www.jianshu.com/p/5e1b1ac6d224
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
相关文章推荐
- CoreData(数据库升级 )版本迁移-iOS App升级安装
- CoreData(数据库升级 )版本迁移-iOS App升级安装
- CoreData(数据库升级 )版本迁移-iOS App升级安装
- iOS app更新数据库数据迁移问题
- App升级时数据库的迁移更新
- ios已上架的APP更新,使用core data的需要升级core Data数据库,这样做
- iOS CoreData (二) 版本升级和数据库迁移
- (转)iOS App初始化或者升级,涉及本地数据库迁移的问题
- iOS 版本迭代 App升级安装 CoreData数据库升级
- iOS开发~App初始化或者升级涉及本地数据库迁移的问题
- iOS如何取得APP的版本信息跟服务器对比进行升级提示?
- iOS如何取得APP的版本信息跟服务器对比进行升级提示
- App版本更新时对SQLite数据库升级或者降级遇到的问题
- 苹果要求所有新app以及版本更新必须支持iOS 8 SDK和64-bit
- iOS App升级安装 - CoreData数据库升级
- App版本更新时对SQLite数据库升级或者降级遇到的问题
- ios app 版本更新
- 苹果要求2015年2月起所有新app以及版本更新必须支持iOS 8 SDK和64-bit
- iOS如何取得APP的版本信息跟Apple服务器对比进行升级提示?
- IOS APP 升级安装-coredata 的迁移,升级