數(shù)據(jù)庫的版本升級

原文鏈接

有四個步驟 (有個問題 就是 假設(shè)老版本是 v1,當前更新的版本是 v3攒磨,這個時候 還需要從 v1=》v2=》v3缺亮? 我覺得是不需要的澈侠,我覺的可以 直接 從 v1=》v3 這個版本形庭,但是每個版本的字段我們是需要記錄下來的 這樣 就根據(jù) 不同的老版本 的數(shù)據(jù) 遷移到 最新版本中就可以了 杰妓,下面寫的例子 是參考的

  • 把原來結(jié)構(gòu)的T 改名 TempT
  • 創(chuàng)建新版本數(shù)據(jù)結(jié)構(gòu)的 表 T
  • 將 TempT 中的 數(shù)據(jù) =》T中
  • 刪除TempT 表

首先需要一個版本枚舉

typedef NS_ENUM(NSInteger, DBVersion) {
    DBVersionV1,
    DBVersionV2,    //歷史版本
    DBVersionV3,    //當前版本
};

static NSString *const DBVersionNum  = @"DBVersionNum";
static NSString *const dbPath = @"\tmp\tmp.db";     //數(shù)據(jù)庫地址

static NSString *const createTable = @"create table if not exists  t1("
"id  integer PRIMARY KEY AUTOINCREMENT NOT NULL,"
"name char(50),"
"sex char(4),"
"recordDate  TIMESTAMP default (datetime('now', 'localtime')))";

- (instancetype)init{
    if (self = [super init]) {
        _queue = [FMDatabaseQueue databaseQueueWithPath:dbPath];
    }
    return self;
}
采用FMDatabaseQueue 進行數(shù)據(jù)庫操作的管理。

/*
 *  需要初始化表結(jié)構(gòu)時碘勉,調(diào)用此方法
 */
- (void)newDBVersionInit{
    if (![[NSUserDefaults standardUserDefaults] objectForKey:DBVersionNum]) {
        //系統(tǒng)之前沒有數(shù)據(jù)庫 新建立表。
        [self createTables];
    }else{
        DBVersion ver = [[[NSUserDefaults standardUserDefaults] objectForKey:DBVersionNum] integerValue];
        switch (ver) {
            case DBVersionV1:{
                [self v1ToV2];
            }
            case DBVersionV2:{
                [self v2Tov3];
            }
            case DBVersionV3:{

            }
                break;
            default:
                break;
        }
    }
}
/*
 *  創(chuàng)建新表
 */
- (void)createTables{
    [_queue inTransaction:^(FMDatabase *db, BOOL *rollback) {
        @try {
            [db executeUpdate:createTable];
        }
        @catch (NSException *exception) {
            *rollback = YES;
        }
    }];
    [[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithInteger:DBVersionV3] forKey:DBVersionNum];
}
把 DBVersionNum的值寫為V3版本 方便下次對比桩卵。

/*
 *  版本1 向 版本2 數(shù)據(jù)遷移
 */
- (void)v1ToV2{

    [_queue inTransaction:^(FMDatabase *db, BOOL *rollback) {
        @try {

            //將原始表名T1 修改為 tempT1
            NSString *renameString = @"alter table t1 rename to tempT1";
            [db executeUpdate:renameString];

            //創(chuàng)建新表T1(V2版本的新表創(chuàng)建)
            [db executeUpdate:createTable];

            //遷移數(shù)據(jù)
            NSString *toString = @"insert into t1(name,sex)  select name,sex from tempT1";
            [db executeUpdate:toString];

            //刪除tempT1臨時表
            NSString *dropTableStr1 = @"drop table tempT1";
            [db executeUpdate:dropTableStr1];
        }
        @catch (NSException *exception) {
            *rollback = YES;
        }
    }] ;


    [[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithInteger:DBVersionV2] forKey:DBVersionNum];
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末验靡,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子雏节,更是在濱河造成了極大的恐慌胜嗓,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,729評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件钩乍,死亡現(xiàn)場離奇詭異辞州,居然都是意外死亡,警方通過查閱死者的電腦和手機寥粹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評論 3 399
  • 文/潘曉璐 我一進店門变过,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人涝涤,你說我怎么就攤上這事媚狰。” “怎么了阔拳?”我有些...
    開封第一講書人閱讀 169,461評論 0 362
  • 文/不壞的土叔 我叫張陵崭孤,是天一觀的道長。 經(jīng)常有香客問我糊肠,道長辨宠,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,135評論 1 300
  • 正文 為了忘掉前任货裹,我火速辦了婚禮嗤形,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘泪酱。我一直安慰自己派殷,他們只是感情好,可當我...
    茶點故事閱讀 69,130評論 6 398
  • 文/花漫 我一把揭開白布墓阀。 她就那樣靜靜地躺著毡惜,像睡著了一般。 火紅的嫁衣襯著肌膚如雪斯撮。 梳的紋絲不亂的頭發(fā)上经伙,一...
    開封第一講書人閱讀 52,736評論 1 312
  • 那天,我揣著相機與錄音,去河邊找鬼帕膜。 笑死枣氧,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的垮刹。 我是一名探鬼主播达吞,決...
    沈念sama閱讀 41,179評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼荒典!你這毒婦竟也來了酪劫?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,124評論 0 277
  • 序言:老撾萬榮一對情侶失蹤寺董,失蹤者是張志新(化名)和其女友劉穎覆糟,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體遮咖,經(jīng)...
    沈念sama閱讀 46,657評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡滩字,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,723評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了御吞。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片麦箍。...
    茶點故事閱讀 40,872評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖陶珠,靈堂內(nèi)的尸體忽然破棺而出内列,到底是詐尸還是另有隱情,我是刑警寧澤背率,帶...
    沈念sama閱讀 36,533評論 5 351
  • 正文 年R本政府宣布话瞧,位于F島的核電站,受9級特大地震影響寝姿,放射性物質(zhì)發(fā)生泄漏交排。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,213評論 3 336
  • 文/蒙蒙 一饵筑、第九天 我趴在偏房一處隱蔽的房頂上張望埃篓。 院中可真熱鬧,春花似錦根资、人聲如沸架专。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,700評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽部脚。三九已至,卻和暖如春裤纹,著一層夾襖步出監(jiān)牢的瞬間委刘,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,819評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留锡移,地道東北人呕童。 一個月前我還...
    沈念sama閱讀 49,304評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像淆珊,于是被迫代替她去往敵國和親夺饲。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,876評論 2 361

推薦閱讀更多精彩內(nèi)容