typedef
ns_enum(nsinteger, dbversion) ;
static
nsstring *const dbversionnum = @"dbversionnum";
static
nsstring *const dbpath = @"\tmp\tmp.db"; //資料庫位址
static
nsstring *const createtable = @"create table if not exists t1("
"id integer primary key autoincrement not null,"
"name char(50),"
"*** char(4),"
"recorddate timestamp default (datetime('now', 'localtime')))";
首先定義了乙個列舉,標識著當前一共有多少資料庫版本變更。(客戶端資料庫結構更改不會太頻繁,如果更改太快,可能意味著初期表設計不合理),此次模擬共三個版本的資料庫。
- (instancetype)init
return
self;
}
採用fmdatabasequeue 進行資料庫操作的管理。
/*
* 需要初始化表結構時,呼叫此方法
*/- (void)newdbversioninitelse
case dbversionv2:
case dbversionv3:
break;
default:
break;}}
}
在這裡判斷dbversionnum系統之前是否儲存過,
沒有儲存說明是第一次安裝,則進行首次建立表處理。
有說明之前資料庫存在,進行資料庫表結構更改。如果是v1版本的資料庫 先從v1公升級到v2,在從v2公升級到v3,以此類推。
/*
* 建立新錶
*/- (void)createtables
@catch (n***ception *exception)
}];[[nsuserdefaults standarduserdefaults] setobject:[nsnumber numberwithinteger:dbversionv3] forkey:dbversionnum];
}
把 dbversionnum的值寫為v3版本 方便下次對比。
/*
* 版本1 向 版本2 資料遷移
*/- (void)v1tov2
@catch (n***ception *exception)
}] ;
[[nsuserdefaults standarduserdefaults] setobject:[nsnumber numberwithinteger:dbversionv2] forkey:dbversionnum];
}- (void)v2tov3] ;
[[nsuserdefaults standarduserdefaults] setobject:[nsnumber numberwithinteger:dbversionv3] forkey:dbversionnum];
}
上文提到的資料遷移流程就是如此。 yarn 公升級最新版本
yarn 公升級最新版本 npm install yarn latest g檢視yarn歷史版本 npm view yarn versions jsonyarn 公升級指定版本 例 公升級到1.21.3版本 yarn upgrade v1.21.3yarn 降低到指定版本 先解除安裝,再安裝 npm...
公升級資料庫
第一版只有book表 第二版加上category表 第三版為book表加上category id 列 book表 這是公升級後的原來沒有category id 列 public static final string create book create table book id integer ...
iOS App版本公升級時資料庫的遷移更新
在每一次執行程式的時候,判斷是否存在資料庫,如果不存在則直接建立資料庫,若存在取出資料庫版本號進行其他的處理.那麼問題來了,為什麼我們需要將版本資訊加一呢,這是為了以後進行版本判斷的時候更加方便.還有乙個問題,為什麼我們將版本資訊放入資料庫而不使用userdefaults快速儲存呢?原因是你需要考慮...