進階20 FMDB

1.FMDB簡介

  • 1.iOS中原生的SQLite API在進行數(shù)據(jù)存儲的時候,需要使用C語言中的函數(shù),操作比較繁瑣。于是膏萧,就出現(xiàn)了一系列將SQLite API進行封裝的庫,例如FMDB、PlausibleDatabase向抢、SQLitePersistentObjects等认境。
  • 2.FMDB是一款簡潔、易用的封裝庫挟鸠。因此叉信,在這里推薦使用第三方框架FMDB,它是對libsqlite3框架的封裝艘希,用起來的步驟與SQLite使用類似硼身,并且它對于多線程的并發(fā)操作進行了處理,所以線程是安全的覆享。

FMDB

  • 1.FMDB是用于存儲數(shù)據(jù)的第三方框架佳遂,F(xiàn)MDB是iOS平臺的SQLite數(shù)據(jù)庫框架,F(xiàn)MDB以O(shè)C的方式封裝了SQLite的C語言API撒顿。
  • 2.優(yōu)點:
  • 2.1 對多線程的并發(fā)操作進行處理丑罪,所以線程安全的。
  • 2.2 FMDB是面向?qū)ο蟮姆锉冢設(shè)C的方式封裝了SQLite的C語言API吩屹,使用起來更加方便,不過需要多關(guān)心數(shù)據(jù)庫操作的知識拧抖。
  • 2.3 FMDB是輕量級的框架煤搜,使用靈活。
  • 3.缺點:不能跨平臺使用唧席,因為它是用OC的語言進行封裝擦盾,所以只能在iOS開發(fā)的時候使用。

為什么選擇FMDB

  • 1.使用CoreData需要用到模型數(shù)據(jù)的轉(zhuǎn)化淌哟,雖然操作簡單迹卢,不需要直接操作數(shù)據(jù)庫,但是绞绒,性能沒有直接使用SQLite高婶希,而SQLite使用的時候榕暇,需要使用C語言函數(shù)蓬衡,操作比較麻煩,因此需要對它進行一個封裝彤枢。但是狰晚,如果只是簡單的封裝,很有可能會忽略更多重要的細(xì)節(jié)缴啡,比如如何垂并發(fā)以及安全性等問題壁晒。
  • 2.因此,推薦使用FMDB框架业栅,它是對libsqlite3框架的封裝秒咐,用起來步驟和SQLite使用類似谬晕,并且它對于多線程的同時操作一個表格時,進行了處理携取,也就是說攒钳,它是線程安全的。FMDB是一個輕量級框架雷滋,使用靈活不撑。

FMDB中重要的類

  • 1.FMDatabase:一個FMDatabase對象,就代表一個單獨的SQLite數(shù)據(jù)庫晤斩,用來執(zhí)行SQL語句焕檬。
  • 2.FMResultSet:使用FMDatabase執(zhí)行查詢后的結(jié)果集合。
  • 3.FMDatabaseQueue:用于在多線程中執(zhí)行多個查詢或更新澳泵,保證了線程安全实愚。

FMDB使用步驟

  • 1.下載FMDB文件(gitHub鏈接:http://github.com/ccgus/fmdb),并將FMDB文件夾添加到項目中(也可使用CocoaPods導(dǎo)入)
  • 2.導(dǎo)入libsqlite3.0框架兔辅,導(dǎo)入頭文件FMDatabase.h
  • 3.代碼實現(xiàn)爆侣,與SQLite使用步驟相似,創(chuàng)建數(shù)據(jù)庫路徑幢妄,獲取數(shù)據(jù)庫路徑兔仰,打開數(shù)據(jù)庫,然后對數(shù)據(jù)庫進行增蕉鸳、刪乎赴、該、查操作潮尝,最后關(guān)閉數(shù)據(jù)庫榕吼。
1803308-bdddd851c720ac07.png

2.使用:

首先下載1?? FMDB第三方, 然后在工程里面2?? 導(dǎo)入libSqlite.tbd 依賴庫
然后:

#第三步: 引入第三方類的頭文件
#import "FMDB.h"

聲明一個FMDatabase屬性, 在工程中初始化一個該類的對象(一個對象相當(dāng)于一個數(shù)據(jù)庫), 該對象在實現(xiàn)過程中用于執(zhí)行sqlite語句

/* 聲明數(shù)據(jù)庫實例屬性 */
@property (strong,nonatomic) FMDatabase *database;```

具體實現(xiàn)打開數(shù)據(jù)庫 + 建表

import "ViewController.h"

import "FMDB.h"

@interface ViewController ()
/* 聲明數(shù)據(jù)庫實例屬性 */
@property (strong,nonatomic) FMDatabase *database;
@end

@implementation ViewController

  • (void)viewDidLoad {
    [super viewDidLoad];

    //1.得到一個路徑
    NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)firstObject];
    NSLog(@"docPath = %@",path);
    //2.在path路徑下拼接一個SQLite數(shù)據(jù)庫
    NSString *fileName = [path stringByAppendingPathComponent:@"/student.sqlite"];
    //3.初始化FMDatabase對象(就是創(chuàng)建一個數(shù)據(jù)庫,上面對FMDatabase類的作用已經(jīng)做出解釋)
    self.database = [FMDatabase databaseWithPath:fileName];
    //4.打開數(shù)據(jù)庫
    if ([self.database open]) {
    //4.1建表
    //在FMDB中,除了查詢之外勉失,所以操作都會使用"executeUpdate"這個方法
    //在FMDB中羹蚣,除查詢之外的所有操作,都稱為“更新”create乱凿、drop顽素、insert、update徒蟆、delete等胁出。
    BOOL result = [self.database executeUpdate:@"create table if not exists t_student (id integer PRIMARY KEY AUTOINCREMENT NOT NULL,name text NOT NULL,age text NOT NULL);"];
    if (result) {
    NSLog(@"建表成功");
    }else{
    NSLog(@"建表失敗");
    }
    }
    }

以下是對數(shù)據(jù)的增、刪段审、改全蝶、查的操作
  • (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    [self insert];
    [self delete:@"jack-80"];
    [self deleteAll];
    [self select];
    [self update:@"jack-1000"];
    }

pragma mark ------------ 插入 ------------

  • (void)insert{
    for (int i = 0; i < 10; i++) {
    NSString *name = [NSString stringWithFormat:@"jack-%d",arc4random_uniform(100)];
    //使用"?"的地方代表不確定,而且不需要寫單引號'',會自動包裝,"?"代表的對象要使用@()來包裝一下抑淫,例如:
    // [self.database executeUpdate:@"insert into t_student(name,age) values (?,?);",name,@(arc4random_uniform(40))];
    [self.database executeUpdateWithFormat:@"insert into t_student(name,age) values (%@,%d);",name,arc4random_uniform(40)];

    }
    }

pragma mark ----------- 刪除 ----------

//根據(jù)字段內(nèi)容刪除

  • (void)delete:(NSString *)name{
    [self.database executeUpdateWithFormat:@"delete from t_student where name = %@",name];
    }

//刪除表中全部內(nèi)容

  • (void)deleteAll{
    [self.database executeUpdate:@"delete from t_student"];
    }

pragma mark ---------- 查詢 ----------

  • (void)select{
    //創(chuàng)建查詢結(jié)果對象
    FMResultSet *resultSet = [self.database executeQuery:@"select * from t_student"];

    //遍歷結(jié)果
    while ([resultSet next]) {
    int ID = [resultSet intForColumn:@"id"];

      NSString *name = [resultSet stringForColumn:@"name"];
      
      int age = [resultSet intForColumn:@"age"];
      
      NSLog(@"%d---%@---%d",ID,name,age);
    

    }
    }

pragma mark ------------- 修改 -------------

  • (void)update:(NSString *)name{
    BOOL result = [self.database executeUpdateWithFormat:@"update t_student set name = %@ where name = 'jack-38'",name];
    if (result) {
    NSLog(@"成功");
    }else{
    NSLog(@"失敗");
    }
    }
    @end

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末绷落,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子始苇,更是在濱河造成了極大的恐慌嘱函,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件埂蕊,死亡現(xiàn)場離奇詭異往弓,居然都是意外死亡,警方通過查閱死者的電腦和手機蓄氧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門函似,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人喉童,你說我怎么就攤上這事撇寞。” “怎么了堂氯?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵蔑担,是天一觀的道長。 經(jīng)常有香客問我咽白,道長啤握,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任晶框,我火速辦了婚禮排抬,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘授段。我一直安慰自己蹲蒲,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布侵贵。 她就那樣靜靜地躺著届搁,像睡著了一般。 火紅的嫁衣襯著肌膚如雪窍育。 梳的紋絲不亂的頭發(fā)上卡睦,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天,我揣著相機與錄音蔫骂,去河邊找鬼么翰。 笑死牺汤,一個胖子當(dāng)著我的面吹牛辽旋,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼补胚,長吁一口氣:“原來是場噩夢啊……” “哼码耐!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起溶其,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤骚腥,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后瓶逃,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體束铭,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年厢绝,在試婚紗的時候發(fā)現(xiàn)自己被綠了契沫。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡昔汉,死狀恐怖懈万,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情靶病,我是刑警寧澤会通,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站娄周,受9級特大地震影響涕侈,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜煤辨,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一驾凶、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧掷酗,春花似錦调违、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽泳挥。三九已至,卻和暖如春屉符,著一層夾襖步出監(jiān)牢的瞬間锹引,已是汗流浹背唆香。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工躬它, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人冯吓。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓组贺,卻偏偏與公主長得像,于是被迫代替她去往敵國和親贞间。 傳聞我的和親對象是個殘疾皇子雹仿,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,792評論 2 345

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