在每一次執行程式的時候,判斷是否存在資料庫,如果不存在則直接建立資料庫,若存在取出資料庫版本號進行其他的處理.
那麼問題來了,為什麼我們需要將版本資訊加一呢,這是為了以後進行版本判斷的時候更加方便.
還有乙個問題,為什麼我們將版本資訊放入資料庫而不使用userdefaults快速儲存呢?原因是你需要考慮到
判段他的資訊是否需要更新
所以每更新一次版本,如果資料結構資訊有變動的時候,直接在後面加case語句即可.
下面是一些參考**,使用fmdb庫:
/**
* 1.當沒有資料庫存在的時候,建立資料庫 然後執行版本1的建立(建立版本表,建立資訊表),儲存1.0+1.0資訊到版本庫,資料庫內版本號為2.0
2.當有資料庫存在的時候,執行判斷版本庫的版本資訊,版本號賦值給dbversion,然後進行資訊的更新,同時更新版本號的更新
*/-(instancetype)init
else
switch (dbversion)
case
2:
case
3: [self excutelocalsql:modify];
[self setdbinfovaluewithstring:@"4.0"];
default:
break;}}
return
self;
}
使用的方法:
//使用的sql語句
static
nsstring *createtb_info=@"create table if not exists t_info (version text)";
static
nsstring *create_tusersql = @"create table if not exists t_user (userid integer not null primary key autoincrement, username text, usergender text, usercreatetime date, userupdatetime date,age integer,islogined integer)";
static
nsstring * update_tusersql = @"alter table t_user add column useraddress text";
static
nsstring *modify=@"alter table t_user add column password text not null default '111111'";
//判斷是否存在資料庫
-(bool)i***istdb
//得到路徑
-(nsstring *)getdbpath
#pragma mark - 更新版本號
-(bool)updateversioninfowithstring:(nsstring *)version
#pragma mark - 插入版本號
-(bool)insertversioninfowithstring:(nsstring *)version
#pragma mark - 建立版本資訊
- (bool)setdbinfovaluewithstring:(nsstring *)string
else
return
yes;
}//得到版本資訊
- (nsstring *)getdbinfovalue
return version;
}#pragma mark - 建立資料庫中的表
- (bool)excutelocalsql:(nsstring *)createtb_info
#pragma mark - 初始化資料庫
- (void)createdb
else
}
iOS APP新版本公升級資料庫
typedef ns enum nsinteger,dbversion static nsstring const dbversionnum dbversionnum static nsstring const dbpath tmp tmp.db 資料庫位址 static nsstring cons...
資料庫公升級
公升級 的版本時,我們有時候希望可以把原資料庫中的資料也保留下來,那麼這個時候我們就需要用到資料庫的公升級。在 android 中sqliteopenhelper 中定義了 onupgrade sqlitedatabase db,int oldversion,int newversion 函式來進行...
influxdb時間序列資料庫版本公升級
influxdb0.9x和1.0x版本的資料儲存引擎不一致,前者是bz或bz1,後者是tsm,如果直接公升級,不更改儲存引擎,1.0x版本無法讀出0.9x的資料。公升級方式是停止influxdb並之後解除安裝influxdb0.9x,解除安裝完成後安裝influxdb1.0x,先不要啟動服務,執行以...