iOS 基於FMDB簡單封裝

joker_king發表於2018-12-20

準備工作

#import "FMDatabase.h"//資料庫的類 相當於sqlite3* 控制程式碼(一個FMDatabase物件就代表一個單獨的SQLite資料庫,用來執行SQL語句)。
#import "FMResultSet.h"//伴隨指標,使用FMDatabase執行查詢後的結果集
#import "FMDatabaseAdditions.h"//FMDatabase類的一個類目,是給FMDatabase的一個擴充套件
#import "FMDatabaseQueue.h"//用與在多執行緒中執行多個查詢或者更新,它能夠保證執行緒是安全的。
#import "FMDatabasePool.h"
複製程式碼
  1. 在桌面新建一個工程,開啟終端輸入pod search FMDB,找到我們所需要的第三方類庫pod 'FMDB', '~> 2.6.2'
  2. 輸入cd然後空格,再將我們桌面上的工程拖進終端裡,這是你會看到生成了一個路徑,這就是你這個工程的根目錄,然後回車。
  3. 在在終端輸入vim Podfile 然後回車。
  4. 然後你進圖了一個Podfile檔案,這時候你需要輸入一個i,進入編輯狀態
  5. 然後把剛才我們找到的pod 'FMDB', '~> 2.6.2'輸入。
  6. 然後在按下鍵盤左上角的ESC鍵再按“:”退出
  7. 然後再在終端中輸入pod instrall,然後等待下載完成。

執行完以上7步,一個第三方的FMDB就配置好了。

封裝一個FMDBhelp

開啟工程,在工程中新建一個繼承自NSObject的類,在這個類裡我們簡單封裝一下一個通用的介面

h檔案

首先我們來看.h檔案中我們需要開放的方法。

#import <Foundation/Foundation.h>

@interface FMDBhelp : NSObject
- (void)createDBWithName:(NSString *)dbName;
//無返回結果集的操作
- (BOOL)notResustSetWithSql:(NSString*)sql;
//有返回結果集的操作
- (NSArray *)qureyWithSql:(NSString *)sql;
//單例
+ (FMDBhelp*)sharedFMDBhelp;
@end
複製程式碼

m檔案

  • 新建一個延展,在類目中宣告兩個屬性
@interface FMDBhelp()
@property (strong, nonatomic)NSString *fileName;//資料庫檔案的路徑
@property (strong, nonatomic)FMDatabase *dataBase;//資料庫物件
@end
複製程式碼
  • 給使用者開放一個自動命名的方法。
-(void)createDBWithName:(NSString *)dbName{
    if (dbName.length == 0) {
        /**
         *  是防止使用者直接傳值為nil或者NULL
         */
        self.fileName = nil; **注意:當返回值為nil或者NULL的時候,表示會在臨時目錄下建立一個空的
資料庫,當FMDatabase連線關閉的時候,檔案也會被刪除**
    }else{
        /**
         *  判斷使用者是否為資料庫檔案新增字尾名
         */
    if ([dbName hasSuffix:@".sqlite"]) {
        self.fileName = dbName;
        }else{
     self.fileName = [dbName stringByAppendingString:@".sqlite"];
        }
    }
}
複製程式碼
  • 根據名稱建立沙盒路徑,用來儲存資料庫檔案。
-(NSString *)DBPath{
    if (self.fileName) {//說明fileName有值
    NSString *savePath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)
    lastObject]stringByAppendingPathComponent:[NSString stringWithFormat:@"%@",self.fileName]];
        return savePath;
    }else{
    return @"";
    }
}
複製程式碼
  • 利用懶載入的方式建立資料庫物件
-(FMDatabase *)dataBase{
    if (!_dataBase) {
        _dataBase = [FMDatabase databaseWithPath:[self DBPath]];
    }return _dataBase;
}
複製程式碼
  • 開啟或者建立一個資料庫
-(BOOL)openOrCreateDB{
    if ([self.dataBase open]) {
        NSLog(@"資料庫開啟成功");
        return YES;
    }else{
        NSLog(@"開啟資料庫失敗");
        return NO;
    }
}
複製程式碼
  • 關閉資料庫的方法
-(void)closeDB{
    BOOL isClose = [self.dataBase close];
    if (isClose) {
        NSLog(@"關閉成功");
    }else{
        NSLog(@"關閉失敗");
    }
}
複製程式碼
  • 無返回結果集的操作
-(BOOL)notResustSetWithSql:(NSString*)sql{
    BOOL isOpen = [self openOrCreateDB];
    if (isOpen) {
        BOOL isUpdate = [self.dataBase executeUpdate:sql];
        [self closeDB];//關閉資料庫
        return isUpdate;
    }else{
        [self closeDB];//關閉資料庫
        return NO;
    }
}
複製程式碼
  • 有返回結果集的操作,查詢方法
-(NSArray *)qureyWithSql:(NSString *)sql{
//開啟資料庫
    BOOL isOpen = [self openOrCreateDB];
    if (isOpen) {
        NSLog(@"開啟資料庫成功");
        //得到所有記錄的結果集
        FMResultSet *resuluSet = [self.dataBase executeQuery:sql];
        //宣告可變陣列,用來存放所有的記錄
        NSMutableArray *resultArray = [NSMutableArray array];
        // 遍歷結果集,取出每一條記錄,並且儲存到可變陣列中
        while ([resuluSet next]) {
            //直接將一條記錄轉換為字典型別
            NSDictionary *dic =[resuluSet resultDictionary];
            [resultArray addObject:dic];
        }
        //釋放結果集
        [resuluSet close];
        //關閉資料庫
        [self closeDB];
        return resultArray;
    }else{
        NSLog(@"開啟資料庫失敗");
        return nil;
    }
}
複製程式碼
  • FMDBhelp的單例
+(FMDBhelp*)sharedFMDBhelp{
    static FMDBhelp *helper = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        helper = [[FMDBhelp alloc]init];
    });
    return helper;
}
複製程式碼

至此一個基於FMDB的簡單封裝就完成了。

相關文章