咱們常使用fmdb或者其餘方式建立sqlite數據庫,可是因爲版本迭代問題,經常有需求要更新數據庫,好比加字段、刪除、修改字段等等,怎麼樣才能升級數據庫且保持原來存的數據有效呢,上代碼:sql
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的更新 }