FMDB 加入数据库版本信息

来源:互联网 发布:linux rws是什么意思 编辑:程序博客网 时间:2024/06/08 12:21

什么是数据库版本信息

本文所提及的数据库版本信息是指用一个版本号(形如1.0、2.0等)来标识当前数据库所有的表得结构。只要数据库表结构有变动,那么就需要用一个新的版本号去标识。


为什么需要加入数据库版本

场景:APP(v1.0.0) 数据库中有1个表 table1

APP(v1.1.0) 数据库增加一张新表,table1 、table2

APP(v1.2.0) 表table2增加新列

当APP从1.0.0直接升级到v1.2.0,数据库需要哪些操作?因为APP升级是不会清空APP原先的数据库,那么就会涉及到数据库的升级。如果没有数据库版本控制,则需要借助于APP的版本做相关处理,较为复杂。此时可以给数据库加上版本,方便数据库升级及管理。

 

如何加入数据库版本信息

//创建数据库版本表if (![db tableExists:@"tb_dbInfo"]) {    result = [db executeUpdate:@"CREATE TABLE tb_dbInfo(version TEXT)"];        }#pragma mark 更新版本号+ (BOOL)updateVersionInfoWithString:(NSString*)version{    __block BOOL b = FALSE;    DataBaseUtil *dbUnit =[DataBaseUtil unit];    [dbUnit.queue inDatabase:^(FMDatabase *db) {        [db open];        b = [db executeUpdate:@"UPDATE tb_dbInfo SET version = ?",version];        [db close];    }];    return b;} #pragma mark 插入版本号+ (BOOL)insertVersionInfoWithString:(NSString*)version{    __block BOOL b = FALSE;    DataBaseUtil *dbUnit =[DataBaseUtil unit];    [dbUnit.queue inDatabase:^(FMDatabase *db) {        [db open];        b = [db executeUpdate:@"INSERT INTO tb_dbInfo(version)VALUES(?)",version];        [db close];    }];    return b;}#pragma mark 得到版本信息+ (NSString*)getDBInfoValue{    __block NSString * version = nil;    DataBaseUtil *dbUnit =[DataBaseUtil unit];    [dbUnit.queue inDatabase:^(FMDatabase *db) {        [db open];        FMResultSet* set =[db executeQuery:@"selectversion from tb_dbInfo"];        if (set) {            while ([set next]) {                version = [set stringForColumn:@"version"];            }        }        [db close];    }];    return version;}#pragma mark 创建版本信息+ (BOOL)setDBInfoValueWithString:(NSString*)string{    BOOL result = FALSE;    if ([self getDBInfoValue]) {        //更新版本        result = [self updateVersionInfoWithString:string];    }    else    {        //插入版本        result =[self insertVersionInfoWithString:string];    }    return result;}

如何更新数据库

+ (BOOL)updateDataBaseVersion:(NSString *)version {int intVersion =[version intValue];switch (intVersion) {case 0://创建table 1等 ,初次创建数据库所有表操作…case 1://创建 table 2…case 3://修改 table 3…}

注意:case间没有break

 

创建或升级数据库流程图

 

说明,是否第一次进入APP:

NSFileManager *manager=[NSFileManager defaultManager];
BOOL isExit = [manager fileExistsAtPath:self.dbPath]// self.dbPath数据库地址

isExit为FALSE表示第一次进入APP,TRUE表示已经创建过数据库。

0 0
原创粉丝点击