標籤:
我們常使用fmdb或者其他方式建立sqlite資料庫,但是由於版本迭代問題,常常有需求要更新資料庫,比如加欄位、刪除、修改欄位等等,怎麼樣才能升級資料庫且保持原來存的資料有效呢,上代碼:
const static NSInteger FAMILY_LIST_DB_MANAGER_VER = 1;@implementation KSFamilyListDBManager{ DBManager *_dbMgr;}+ (instancetype)sharedManager{ static KSFamilyListDBManager *s_instance = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ s_instance = [[KSFamilyListDBManager alloc] init]; }); return s_instance;}- (id)init { self = [super init]; if (self) { _dbMgr = [DBManager defaultMgr]; [self createTables]; // 升級操作 NSInteger ver = [[ConfigDBManager sharedManager] familyListDBManagerVersion]; if (ver < 1) { [[ConfigDBManager sharedManager] setFamilyListDBManagerVersion:FAMILY_LIST_DB_MANAGER_VER]; } else if (ver < FAMILY_LIST_DB_MANAGER_VER) { [self upgrade]; } } return self;}- (void)upgrade { //擷取儲存好的原版本號碼 NSInteger oldVersionNum = [[ConfigDBManager sharedManager] familyListDBManagerVersion]; if (FAMILY_LIST_DB_MANAGER_VER <= oldVersionNum || oldVersionNum == 0) { return; } //升級 [self upgrade:oldVersionNum]; // 儲存新的版本號碼到庫中 -這裡大家可以使用NSUserDefault儲存 [[ConfigDBManager sharedManager] setFamilyListDBManagerVersion:FAMILY_LIST_DB_MANAGER_VER];}- (void)upgrade:(NSInteger)oldVersion { if (oldVersion >= FAMILY_LIST_DB_MANAGER_VER) { return; } switch (oldVersion) { case 0: break; case 1: [self upgradeFrom1To2]; break; case 2: break; default: break; } oldVersion ++; // 遞迴判斷是否需要升級 [self upgrade:oldVersion];}- (void)upgradeFrom1To2 { //這裡執行Sql語句 執行版本1到版本2的更新}
ios 資料庫更新升級方案