準(zhǔn)備工作
#import"FMDatabase.h"http://數(shù)據(jù)庫的類 相當(dāng)于sqlite3* 句柄(一個FMDatabase對象就代表一個單獨的SQLite數(shù)據(jù)庫涛浙,用來執(zhí)行SQL語句)骚亿。#import"FMResultSet.h"http://伴隨指針碘耳,使用FMDatabase執(zhí)行查詢后的結(jié)果集#import"FMDatabaseAdditions.h"http://FMDatabase類的一個類目,是給FMDatabase的一個擴(kuò)展#import"FMDatabaseQueue.h"http://用與在多線程中執(zhí)行多個查詢或者更新泳炉,它能夠保證線程是安全的笆呆。#import"FMDatabasePool.h"
在桌面新建一個工程相寇,打開終端輸入pod search FMDB声诸,找到我們所需要的第三方類庫pod 'FMDB', '~> 2.6.2'
輸入cd然后空格,再將我們桌面上的工程拖進(jìn)終端里围苫,這是你會看到生成了一個路徑裤园,這就是你這個工程的根目錄,然后回車剂府。
在在終端輸入vim Podfile 然后回車拧揽。
然后你進(jìn)圖了一個Podfile文件,這時候你需要輸入一個i腺占,進(jìn)入編輯狀態(tài)
然后把剛才我們找到的pod 'FMDB', '~> 2.6.2'輸入淤袜。
然后在按下鍵盤左上角的ESC鍵再按“:”退出
然后再在終端中輸入pod instrall,然后等待下載完成衰伯。
執(zhí)行完以上7步铡羡,一個第三方的FMDB就配置好了。
封裝一個FMDBhelp
打開工程意鲸,在工程中新建一個繼承自NSObject的類烦周,在這個類里我們簡單封裝一下一個通用的接口
h文件
首先我們來看.h文件中我們需要開放的方法。
#import@interfaceFMDBhelp:NSObject- (void)createDBWithName:(NSString*)dbName;//無返回結(jié)果集的操作- (BOOL)notResustSetWithSql:(NSString*)sql;//有返回結(jié)果集的操作- (NSArray*)qureyWithSql:(NSString*)sql;//單例+ (FMDBhelp*)sharedFMDBhelp;@end
m文件
新建一個延展临扮,在類目中聲明兩個屬性
@interfaceFMDBhelp()@property(strong, nonatomic)NSString *fileName;//數(shù)據(jù)庫文件的路徑@property(strong, nonatomic)FMDatabase *dataBase;//數(shù)據(jù)庫對象@end
給用戶開放一個自動命名的方法论矾。
-(void)createDBWithName:(NSString*)dbName{if(dbName.length ==0) {/**
*? 是防止用戶直接傳值為nil或者NULL
*/self.fileName =nil; **注意:當(dāng)返回值為nil或者NULL的時候,表示會在臨時目錄下創(chuàng)建一個空的數(shù)據(jù)庫杆勇,當(dāng)FMDatabase連接關(guān)閉的時候贪壳,文件也會被刪除**? }else{/**
*? 判斷用戶是否為數(shù)據(jù)庫文件添加后綴名
*/if([dbName hasSuffix:@".sqlite"]) {self.fileName = dbName;? ? ? }else{self.fileName = [dbName stringByAppendingString:@".sqlite"];? ? ? }? }}
根據(jù)名稱創(chuàng)建沙盒路徑,用來保存數(shù)據(jù)庫文件蚜退。
-(NSString*)DBPath{if(self.fileName) {//說明fileName有值NSString*savePath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES)? lastObject]stringByAppendingPathComponent:[NSStringstringWithFormat:@"%@",self.fileName]];returnsavePath;? }else{return@"";? }}
利用懶加載的方式創(chuàng)建數(shù)據(jù)庫對象
-(FMDatabase *)dataBase{if(!_dataBase) {_dataBase= [FMDatabase databaseWithPath:[self DBPath]];? }return_dataBase;}
打開或者創(chuàng)建一個數(shù)據(jù)庫
-(BOOL)openOrCreateDB{if([self.dataBase open]) {NSLog(@"數(shù)據(jù)庫打開成功");returnYES;? }else{NSLog(@"打開數(shù)據(jù)庫失敗");returnNO;? }}
關(guān)閉數(shù)據(jù)庫的方法
-(void)closeDB{BOOLisClose = [self.dataBase close];if(isClose) {NSLog(@"關(guān)閉成功");? }else{NSLog(@"關(guān)閉失敗");? }}
無返回結(jié)果集的操作
-(BOOL)notResustSetWithSql:(NSString*)sql{BOOLisOpen = [selfopenOrCreateDB];if(isOpen) {BOOLisUpdate = [self.dataBase executeUpdate:sql];? ? ? [selfcloseDB];//關(guān)閉數(shù)據(jù)庫returnisUpdate;? }else{? ? ? [selfcloseDB];//關(guān)閉數(shù)據(jù)庫returnNO;? }}
有返回結(jié)果集的操作闰靴,查詢方法
-(NSArray*)qureyWithSql:(NSString*)sql{//打開數(shù)據(jù)庫BOOLisOpen = [selfopenOrCreateDB];if(isOpen) {NSLog(@"打開數(shù)據(jù)庫成功");//得到所有記錄的結(jié)果集FMResultSet *resuluSet = [self.dataBase executeQuery:sql];//聲明可變數(shù)組,用來存放所有的記錄NSMutableArray*resultArray = [NSMutableArrayarray];// 遍歷結(jié)果集钻注,取出每一條記錄,并且存儲到可變數(shù)組中while([resuluSet next]) {//直接將一條記錄轉(zhuǎn)換為字典類型NSDictionary*dic =[resuluSet resultDictionary];? ? ? ? ? [resultArray addObject:dic];? ? ? }//釋放結(jié)果集[resuluSet close];//關(guān)閉數(shù)據(jù)庫[selfcloseDB];returnresultArray;? }else{NSLog(@"打開數(shù)據(jù)庫失敗");returnnil;? }}
FMDBhelp的單例
+(FMDBhelp*)sharedFMDBhelp{static FMDBhelp *helper = nil;staticdispatch_once_tonceToken;dispatch_once(&onceToken,^{? ? ? helper = [[FMDBhelp alloc]init];});return helper;}
至此一個基于FMDB的簡單封裝就完成了蚂且。