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