什么是数据库版本信息
本文所提及的数据库版本信息是指用一个版本号(形如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表示已经创建过数据库。