iOS開發(fā)——FMDB的使用

今天決定給手上的項目加上一個數(shù)據(jù)庫涂佃,用來進行數(shù)據(jù)持久化操作,關(guān)于在iOS端的數(shù)據(jù)持久化方式的差異缚去,這里也就不再贅述,相信如果真實使用并且去感受過的人琼开,有自己的評判標準易结。

在比較了RealmSQLite之后,我決定在項目中依然使用SQLite數(shù)據(jù)庫搞动,并切還是使用FMDB這個第三方庫來簡化操作躏精。(Realm我是覺得體積龐大,至于CoreData問我為什么不用滋尉,小心我打人哦)玉控。

SQLite語句,從我自身來說狮惜,感覺其實沒有那么好的記憶力高诺,所以我又花了一點點時間來溫習FMDB的常規(guī)操作,想到自己從來沒有總結(jié)過數(shù)據(jù)庫這方面的知識碾篡,今天就花一點點時間虱而,對iOS端SQLite數(shù)據(jù)庫做一點操作層面的總結(jié)。

SQLite數(shù)據(jù)庫开泽,其實并不難學牡拇,打敗許多初學者的,我覺得應該是它C語言中繁瑣的API穆律。我之前說我記不住惠呼,這套API,我真的看幾次忘幾次峦耘。所以才有了應運而生的FMDB剔蹋。

建表以及關(guān)閉表

使用數(shù)據(jù)庫的第一件事,就是建立一個數(shù)據(jù)庫辅髓。要注意的是泣崩,在iOS環(huán)境下,只有document directory 是可以進行讀寫的洛口。在寫程序時用的那個Resource資料夾底下的東西都是read-only矫付。因此,建立的資料庫要放在document 資料夾下第焰。方法如下:

    //建表
    NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
    NSLog(@"doc = %@", doc);
    NSString *fileName = [doc stringByAppendingPathComponent:@"device.sqlite"];
    FMDatabase *db = [FMDatabase databaseWithPath:fileName];
    if ([db open]) {
        BOOL result = [db executeUpdate:@"CREATE TABLE IF NOT EXISTS Device (deviceID text, deviceName text, deviceType integer, deviceStatus integer);"];
        if (result) {
            NSLog(@"創(chuàng)建表成功");
        } else {
            NSLog(@"建表失敗");
        }
    }
    

這樣簡單的操作就已經(jīng)完成了數(shù)據(jù)庫的創(chuàng)建买优,每一行代碼都很好理解,先是找到程序在沙盒中的路徑挺举,之后填寫數(shù)據(jù)庫的名字杀赢,完成創(chuàng)建。如果創(chuàng)建數(shù)據(jù)庫成功豹悬,那么我們就創(chuàng)建一個名字叫Device的表葵陵,這個設備表里有 deviceID, deviceName, deviceType, deviceStatus 四個字段,他們的類型分別是text瞻佛、text脱篙、integer娇钱、integer

關(guān)于CURD

插入數(shù)據(jù)

首先绊困,我們對我們的DeviceModel的模型文件聲明屬性文搂,


#import <Foundation/Foundation.h>

@interface DeviceModel : NSObject

@property (nonatomic, copy) NSString *deviceName;

@property (nonatomic, copy) NSString *deviceID;

@property (nonatomic, assign) NSInteger deviceType;

@property (nonatomic, assign) NSInteger deviceStatus;

- (instancetype)initWithDeviceName:(NSString *)deviceName DeviceID:(NSString *)deviceID DeviceType:(NSInteger)deviceType DeviceStatus:(NSInteger)deviceStatus;

+ (instancetype)DeviceWithDeviceName:(NSString *)deviceName DeviceID:(NSString *)deviceID DeviceType:(NSInteger)deviceType DeviceStatus:(NSInteger)deviceStatus;

@end

.m文件中寫好它的初始化方法


#import "DeviceModel.h"

@implementation DeviceModel

- (instancetype)initWithDeviceName:(NSString *)deviceName DeviceID:(NSString *)deviceID DeviceType:(NSInteger)deviceType DeviceStatus:(NSInteger)deviceStatus {
    
    self = [super init];
    
    if (self) {
        _deviceName = deviceName;
        _deviceID = deviceID;
        _deviceType = deviceType;
        _deviceStatus = deviceStatus;
    }
    return self;
}

+ (instancetype)DeviceWithDeviceName:(NSString *)deviceName DeviceID:(NSString *)deviceID DeviceType:(NSInteger)deviceType DeviceStatus:(NSInteger)deviceStatus {
    
    DeviceModel *model = [[DeviceModel alloc] initWithDeviceName:deviceName DeviceID:deviceID DeviceType:deviceType DeviceStatus:deviceStatus];
    return model;
    
}

@end

接下來是插入數(shù)據(jù)了

插入數(shù)據(jù)跟前面一樣,用executeUpdate后面加語法就可以了秤朗。比較不同的是煤蹭,因為插入的數(shù)據(jù)會跟Objective-C的變數(shù)有關(guān),所以在string里使用?號來代表這些變數(shù)取视。


    DeviceModel *model = [[DeviceModel alloc] initWithDeviceName:@"控制主機" DeviceID:@"0001" DeviceType:1 DeviceStatus:0];
    [db executeUpdateWithFormat:@"INSERT INTO Device (deviceID, deviceName, deviceType, deviceStatus) VALUES (%@, %@, %ld, %ld);",model.deviceID, model.deviceName, model.deviceType, model.deviceStatus];

刪除更新數(shù)據(jù)

//刪除更新數(shù)據(jù)
    NSString *device1 = @"0001";
    [db executeUpdateWithFormat:@"delete from Device where deviceID = %@;", device1];
    [db executeUpdateWithFormat:@"update Device set deviceStatus = %d where deviceID = %@", 1, device1];
    

查詢數(shù)據(jù)

//查詢數(shù)據(jù)
    FMResultSet *resultSet = [db executeQuery:@"select * from Device"];
    while ([resultSet next]) {
        int type = [resultSet intForColumn:@"deviceType"];
        int status = [resultSet intForColumn:@"deviceStatus"];
        NSString *name = [resultSet objectForColumnName:@"deviceName"];
        NSString *id = [resultSet objectForColumnName:@"deviceID"];
        NSLog(@"type = %d , status = %d, name = %@, id = %@", type, status, name, id);
        } 

至此硝皂,F(xiàn)MDB的常用操作就已經(jīng)講完了,后面還會補上FMDB的多線程操作作谭。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末稽物,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子折欠,更是在濱河造成了極大的恐慌贝或,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件锐秦,死亡現(xiàn)場離奇詭異咪奖,居然都是意外死亡,警方通過查閱死者的電腦和手機酱床,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進店門羊赵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人斤葱,你說我怎么就攤上這事慷垮∫菊ⅲ” “怎么了揍堕?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長汤纸。 經(jīng)常有香客問我衩茸,道長,這世上最難降的妖魔是什么贮泞? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任楞慈,我火速辦了婚禮,結(jié)果婚禮上啃擦,老公的妹妹穿的比我還像新娘囊蓝。我一直安慰自己,他們只是感情好令蛉,可當我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布聚霜。 她就那樣靜靜地躺著狡恬,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蝎宇。 梳的紋絲不亂的頭發(fā)上弟劲,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天,我揣著相機與錄音姥芥,去河邊找鬼兔乞。 笑死,一個胖子當著我的面吹牛凉唐,可吹牛的內(nèi)容都是我干的庸追。 我是一名探鬼主播,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼台囱,長吁一口氣:“原來是場噩夢啊……” “哼锚国!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起玄坦,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤血筑,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后煎楣,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體豺总,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年择懂,在試婚紗的時候發(fā)現(xiàn)自己被綠了喻喳。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡困曙,死狀恐怖表伦,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情慷丽,我是刑警寧澤蹦哼,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站要糊,受9級特大地震影響纲熏,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜锄俄,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一局劲、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧奶赠,春花似錦鱼填、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽塑猖。三九已至,卻和暖如春谈跛,著一層夾襖步出監(jiān)牢的瞬間羊苟,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工感憾, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蜡励,地道東北人。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓阻桅,卻偏偏與公主長得像凉倚,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子嫂沉,可洞房花燭夜當晚...
    茶點故事閱讀 42,802評論 2 345

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

  • 是否有這般長夜 淋淋細雨刺入耳簾 而我一人 半倚窗邊 你在云的那頭一臉歡顏 微風拂過 清涼撲面 你稍稍困倦 啟朱唇...
    N角獸閱讀 399評論 0 0
  • 人之所以有能力懸殊稽寒、善惡不同、生死之欲趟章,皆因各自境界不等罷了杏糙。 1、無論你遇見誰蚓土,他都是在你生命中該出現(xiàn)的人宏侍。 這...
    思學mm閱讀 270評論 0 0