FMDB 加入数据库版本信息

什么是数据库版本信息

本文所提及的数据库版本信息是指用一个版本号(形如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

 

创建或升级数据库流程图

 FMDB 加入数据库版本信息_第1张图片

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

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

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

你可能感兴趣的:(ios,数据库)