iOS | FMDB快速上手

任何的開發(fā)都或多或少的接觸到數(shù)據(jù)庫,而在IOS中一般使用的是SQLite數(shù)據(jù)庫,這是一個輕量功能較為不錯的數(shù)據(jù)庫.而現(xiàn)在用到比較多的第三方數(shù)據(jù)庫操作框架就是FMDB.廢話不多說,相信查找到這篇文章的都是已經(jīng)上手的IOS開發(fā)者,直接上一些相關(guān)使用.

首先簡單介紹下

實現(xiàn)客戶端數(shù)據(jù)庫操作的第三方框架.
操作數(shù)據(jù)庫的類 : FMDatabase.h
隊列調(diào)度數(shù)據(jù)庫執(zhí)行的類 : FMDatabaseQueue.h
查詢數(shù)據(jù)的類 : FMResultSet.h

注意

第三方的官方文檔是這么說的:

FMDatabaseQueue - If you're wanting to perform queries and updates on multiple threads, you'll want to use this class. It's described in the "Thread Safety" section below.

翻譯:如果你像去實現(xiàn)查找和更新在多線程上,你就是用這個類,這個是建立在線程安全之上的.
做法:一般自行封裝成一個工具類,設(shè)計成單例.
目的:全局只有一個串行隊列,這樣操作數(shù)據(jù)庫更加安全.

先創(chuàng)建.h文件
@interface FMDatabaseQueueManager : FMDatabaseQueue
//提供單例入口
+ (instancetype)sharedManager;
@end
在.m文件中實現(xiàn)方法,創(chuàng)建一個數(shù)據(jù)庫
+(instancetype)sharedManager{
    static FMDatabaseQueueManager *instance;

    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        // 1.獲取數(shù)據(jù)庫路徑,將要把數(shù)據(jù)庫存到這個路徑中.
        NSString *SQLPath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"my.db"];
        // 2. 創(chuàng)建管理數(shù)據(jù)庫對象
        instance = [FMDatabaseQueueManager databaseQueueWithPath:SQLPath];
    });

    return instance;
}
新建表
  [[FMDatabaseQueueManager sharedManager] inDatabase:^(FMDatabase *db) {
            BOOL isCreate = [db executeUpdate:@"create table if not exists t_person(id integer primary key,name text not null,age integer);"];
使用事務(wù)插入數(shù)據(jù)
// 1.定義SQL語句
    NSString *insertSQL = @"insert into t_person(name,age) values(?,?);";

    // 2.隊列調(diào)度數(shù)據(jù)庫,使用事務(wù)插入數(shù)據(jù),性能比原生SQLite3要好
    [[FMDatabaseQueueManager sharedManager] inTransaction:^(FMDatabase *db, BOOL *rollback) {

        // 3.循環(huán)新增大批量的數(shù)據(jù)
        for (NSInteger i = 0; i < 1000; i++) {

            // 4.執(zhí)行SQL
            BOOL isOK = [db executeUpdate:insertSQL,@"張三",@(100)];

            // 出錯就回滾
            if (!isOK) {
                // 回滾快照
                *rollback = YES;
                // 非常重要
                break;
            }
        }
    }];
查詢數(shù)據(jù)
// 1.定義SQL語句
    NSString *updateSQL = @"select name,age from t_person;";

    // 2.隊列調(diào)度數(shù)據(jù)庫
    [[FMDatabaseQueueManager sharedManager] inDatabase:^(FMDatabase *db) {

        // 3.執(zhí)行SQL
        FMResultSet *resultSet = [db executeQuery:updateSQL];
        // 4.逐條取記錄
        while ([resultSet next]) {

            NSString *name = [resultSet stringForColumn:@"name"];
            int age = [resultSet intForColumn:@"age"];

            NSLog(@"%@ -- %d",name,age);
        }
    }];
刪除數(shù)據(jù)
// 1.定義SQL語句
    NSString *updateSQL = @"delete from t_person where id = ?;";

    // 2.隊列調(diào)度數(shù)據(jù)庫
    [[FMDatabaseQueueManager sharedManager]  inDatabase:^(FMDatabase *db) {

        // 3.執(zhí)行SQL
        BOOL isOK = [db executeUpdate:updateSQL,@(6)];
        if (isOK) {
            NSLog(@"刪除數(shù)據(jù)成功");
        } else {
            NSLog(@"刪除數(shù)據(jù)失敗");
        }
    }];
修改數(shù)據(jù)
// 1.定義SQL語句
    NSString *updateSQL = @"update t_person set name = ?,age = ? where id = ?;";

    // 2.隊列調(diào)度數(shù)據(jù)庫
    [[FMDatabaseQueueManager sharedManager]  inDatabase:^(FMDatabase *db) {

        // 3.執(zhí)行SQL
        BOOL isOK = [db executeUpdate:updateSQL,@"王五",@(19),@(3)];
        if (isOK) {
            NSLog(@"更新數(shù)據(jù)成功");
        } else {
            NSLog(@"更新數(shù)據(jù)失敗");
        }

        NSLog(@"影響行數(shù) %d", db.changes);
    }];
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末屏镊,一起剝皮案震驚了整個濱河市吊洼,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌糕簿,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,627評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件红符,死亡現(xiàn)場離奇詭異胁后,居然都是意外死亡,警方通過查閱死者的電腦和手機纫普,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來好渠,“玉大人昨稼,你說我怎么就攤上這事∪” “怎么了假栓?”我有些...
    開封第一講書人閱讀 169,346評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長霍掺。 經(jīng)常有香客問我但指,道長,這世上最難降的妖魔是什么抗楔? 我笑而不...
    開封第一講書人閱讀 60,097評論 1 300
  • 正文 為了忘掉前任棋凳,我火速辦了婚禮,結(jié)果婚禮上连躏,老公的妹妹穿的比我還像新娘剩岳。我一直安慰自己,他們只是感情好入热,可當(dāng)我...
    茶點故事閱讀 69,100評論 6 398
  • 文/花漫 我一把揭開白布拍棕。 她就那樣靜靜地躺著,像睡著了一般勺良。 火紅的嫁衣襯著肌膚如雪绰播。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,696評論 1 312
  • 那天尚困,我揣著相機與錄音蠢箩,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛谬泌,可吹牛的內(nèi)容都是我干的滔韵。 我是一名探鬼主播,決...
    沈念sama閱讀 41,165評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼掌实,長吁一口氣:“原來是場噩夢啊……” “哼陪蜻!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起贱鼻,我...
    開封第一講書人閱讀 40,108評論 0 277
  • 序言:老撾萬榮一對情侶失蹤宴卖,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后邻悬,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體症昏,經(jīng)...
    沈念sama閱讀 46,646評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,709評論 3 342
  • 正文 我和宋清朗相戀三年拘悦,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片橱脸。...
    茶點故事閱讀 40,861評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡础米,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出添诉,到底是詐尸還是另有隱情屁桑,我是刑警寧澤,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布栏赴,位于F島的核電站蘑斧,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏须眷。R本人自食惡果不足惜竖瘾,卻給世界環(huán)境...
    茶點故事閱讀 42,196評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望花颗。 院中可真熱鬧捕传,春花似錦、人聲如沸扩劝。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,698評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽棒呛。三九已至聂示,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間簇秒,已是汗流浹背鱼喉。 一陣腳步聲響...
    開封第一講書人閱讀 33,804評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蒲凶。 一個月前我還...
    沈念sama閱讀 49,287評論 3 379
  • 正文 我出身青樓气筋,卻偏偏與公主長得像,于是被迫代替她去往敵國和親旋圆。 傳聞我的和親對象是個殘疾皇子宠默,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,860評論 2 361

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

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件灵巧、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,124評論 4 61
  • 緣來她在那閱讀 148評論 0 0
  • 2017年10月26日我參加了某婚紗攝影的投票活動搀矫。在未來的3天,我就開始了短暫的拉票之旅刻肄,這幾天瓤球,通過網(wǎng)絡(luò)拉...
    愛蕭閱讀 713評論 0 1
  • 今天晨讀分享的書是《意料之外》,分享了三個方面的內(nèi)容敏弃。 1.理解意外 生活中總存在著大大小小的意外卦羡,能給我們帶來驚...
    有個歐寶閱讀 257評論 0 0
  • 當(dāng)太陽灑下第一縷光亮的時候整座山都應(yīng)當(dāng)是春天的顏色所有的眼睛會在這一刻睜開喚醒一條熟睡的小河 每個人都有幸福的理由...
    紫章閱讀 289評論 2 3