FMDB的簡單使用

FMDB的github地址
https://github.com/ccgus/fmdb

FMDB有三個主要的類
FMDatabase
一個FMDatabase對象就代表一個單獨的SQLite數據庫
用來執(zhí)行SQL語句

FMResultSet
使用FMDatabase執(zhí)行查詢后的結果集

FMDatabaseQueue
用于在多線程中執(zhí)行多個查詢或更新奄毡,它是線程安全的

1.打開創(chuàng)建數據庫

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    NSString *cachePath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0];
    // 拼接文件名
    NSString *filePath = [cachePath stringByAppendingPathComponent:@"contact.sqlite"];
    // 創(chuàng)建一個數據庫的實例,僅僅在創(chuàng)建一個實例,并會打開數據庫
    FMDatabase *db = [FMDatabase databaseWithPath:filePath];
    _db = db;
    // 打開數據庫
    BOOL flag = [db open];
    if (flag) {
        NSLog(@"打開成功");
    }else{
        NSLog(@"打開失敗");
    }
    
    // 創(chuàng)建數據庫表
    // 數據庫操作:插入,更新,刪除都屬于update
    // 參數:sqlite語句
   BOOL flag1 = [db executeUpdate:@"create table if not exists t_contact (id integer primary key autoincrement,name text,phone text);"];
    if (flag1) {
        NSLog(@"創(chuàng)建成功");
    }else{
        NSLog(@"創(chuàng)建失敗");

    }
}

2.增

- (IBAction)insert:(id)sender {
    // ?:表示數據庫里面的占位符
   BOOL flag = [_db executeUpdate:@"insert into t_contact (name,phone) values (?,?)",@"oooo",@"21321321"];
    if (flag) {
        NSLog(@"success");
    }else{
         NSLog(@"failure");
    }
    
}

3.刪

- (IBAction)delete:(id)sender {
    BOOL flag = [_db executeUpdate:@"delete from t_contact;"];
    if (flag) {
        NSLog(@"success");
    }else{
        NSLog(@"failure");
    }
}

4.改

- (IBAction)update:(id)sender {
    // FMDB诗芜?重贺,只能是對象,不能是基本數據類型涣澡,如果是int類型跛锌,就包裝成NSNumber  簡單包裝@12
    BOOL flag = [_db executeUpdate:@"update t_contact set name = ?",@"abc"];
    if (flag) {
        NSLog(@"success");
    }else{
        NSLog(@"failure");
    }
}

5.查

- (IBAction)select:(id)sender {
    
  FMResultSet *result =  [_db executeQuery:@"select * from t_contact"];
    
    // 從結果集里面往下找
    while ([result next]) {
     NSString *name = [result stringForColumn:@"name"];
        NSString *phone = [result stringForColumn:@"phone"];
        NSLog(@"%@--%@",name,phone);
    }
    
}

6.線程安全

要一起操作成功的這種的一般要用事務

FMDatabase這個類是線程不安全的弃秆,如果在多個線程中同時使用一個FMDatabase實例,會造成數據混亂等問題

為了保證線程安全,FMDB提供方便快捷的FMDatabaseQueue類

FMDatabaseQueue的創(chuàng)建 不需要手動打開了

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    NSString *cachePath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0];
    // 拼接文件名
    NSString *filePath = [cachePath stringByAppendingPathComponent:@"user.sqlite"];
    // 創(chuàng)建數據庫實例
    FMDatabaseQueue *queue = [FMDatabaseQueue databaseQueueWithPath:filePath];
    _queue = queue;
    
    // 創(chuàng)建數據庫表
    // 提供了一個多線程安全的數據庫實例
    [queue inDatabase:^(FMDatabase *db) {
        
      BOOL flag =  [db executeUpdate:@"create table if not exists t_user (id integer primary key autoincrement,name text,money integer)"];
        
        if (flag) {
            NSLog(@"success");
        }else{
            NSLog(@"failure");
        }
        
    }];   
}

增刪查都差不多 改的時候使用事務

- (IBAction)update:(id)sender {
    // update t_user set money = 500 where name = 'a';
    //  update t_user set money = 1000 where name = 'b';
    // a -> b 500 a 500
    // b + 500 = b 1000
    
    
    [_queue inDatabase:^(FMDatabase *db) {
        
        // 開啟事務
        [db beginTransaction];
       BOOL flag = [db executeUpdate:@"update t_user set money = ? where name = ?;",@500,@"a"];
        if (flag) {
            NSLog(@"success");
        }else{
            NSLog(@"failure");
            // 回滾
            [db rollback];
        }
        
        BOOL flag1 = [db executeUpdate:@"updat t_user set money = ? where name = ?;",@1000,@"b"];
        if (flag1) {
            NSLog(@"success");
        }else{
            NSLog(@"failure");
            [db rollback];
        }
        
        // 全部操作完成時候再去
        [db commit];
    }];    
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末菠赚,一起剝皮案震驚了整個濱河市脑豹,隨后出現的幾起案子,更是在濱河造成了極大的恐慌衡查,老刑警劉巖瘩欺,帶你破解...
    沈念sama閱讀 222,000評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異峡捡,居然都是意外死亡击碗,警方通過查閱死者的電腦和手機筑悴,發(fā)現死者居然都...
    沈念sama閱讀 94,745評論 3 399
  • 文/潘曉璐 我一進店門们拙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人阁吝,你說我怎么就攤上這事砚婆。” “怎么了突勇?”我有些...
    開封第一講書人閱讀 168,561評論 0 360
  • 文/不壞的土叔 我叫張陵装盯,是天一觀的道長。 經常有香客問我甲馋,道長埂奈,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,782評論 1 298
  • 正文 為了忘掉前任定躏,我火速辦了婚禮账磺,結果婚禮上,老公的妹妹穿的比我還像新娘痊远。我一直安慰自己垮抗,他們只是感情好,可當我...
    茶點故事閱讀 68,798評論 6 397
  • 文/花漫 我一把揭開白布碧聪。 她就那樣靜靜地躺著冒版,像睡著了一般。 火紅的嫁衣襯著肌膚如雪逞姿。 梳的紋絲不亂的頭發(fā)上辞嗡,一...
    開封第一講書人閱讀 52,394評論 1 310
  • 那天,我揣著相機與錄音滞造,去河邊找鬼续室。 笑死,一個胖子當著我的面吹牛断部,可吹牛的內容都是我干的猎贴。 我是一名探鬼主播,決...
    沈念sama閱讀 40,952評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼她渴!你這毒婦竟也來了达址?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,852評論 0 276
  • 序言:老撾萬榮一對情侶失蹤趁耗,失蹤者是張志新(化名)和其女友劉穎沉唠,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體苛败,經...
    沈念sama閱讀 46,409評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡满葛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,483評論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了罢屈。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嘀韧。...
    茶點故事閱讀 40,615評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖缠捌,靈堂內的尸體忽然破棺而出锄贷,到底是詐尸還是另有隱情,我是刑警寧澤曼月,帶...
    沈念sama閱讀 36,303評論 5 350
  • 正文 年R本政府宣布谊却,位于F島的核電站,受9級特大地震影響哑芹,放射性物質發(fā)生泄漏炎辨。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,979評論 3 334
  • 文/蒙蒙 一聪姿、第九天 我趴在偏房一處隱蔽的房頂上張望碴萧。 院中可真熱鬧,春花似錦咳燕、人聲如沸勿决。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽低缩。三九已至,卻和暖如春曹货,著一層夾襖步出監(jiān)牢的瞬間咆繁,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評論 1 272
  • 我被黑心中介騙來泰國打工顶籽, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留玩般,地道東北人。 一個月前我還...
    沈念sama閱讀 49,041評論 3 377
  • 正文 我出身青樓礼饱,卻偏偏與公主長得像坏为,于是被迫代替她去往敵國和親究驴。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,630評論 2 359

推薦閱讀更多精彩內容

  • 一匀伏、FMDB基本使用 1洒忧、什么是FMDB? FMDB是一款簡潔够颠、易用的封裝庫熙侍。因此,在這里推薦使用第三方框架FMD...
    豆寶的老公閱讀 10,260評論 1 14
  • 前言 以前使用SQLite十分的麻煩,代碼很冗余,所以開發(fā)者朋友們一般在實際開發(fā)的過程中都是使用的是FMDB這個開...
    Alexander閱讀 1,301評論 6 16
  • FMDB的下載地址是:https://github.com/ccgus/fmdb工程中使用FMDB履磨,必須導入lib...
    小__小閱讀 862評論 0 1
  • FMDB (https://github.com/ccgus/fmdb) 是一款簡潔蛉抓、易用的封裝庫,這一篇文章簡單...
    怪獸密保閱讀 176評論 0 0
  • 這篇文章沒有提到coredata, 如果想了解coredata的小伙伴就不要在這浪費時間啦~ 我們常用到的存儲本地...
    飯后的甜點_閱讀 939評論 0 0