SQLite (http://www.sqlite.org/docs.html) 是一個輕量級的關係數據庫。iOS SDK 很早就支持了 SQLite,在使用時,只須要加入 libsqlite3.dylib 依賴以及引入 sqlite3.h 頭文件便可。可是,原生的 SQLite API 在使用上至關不友好,在使用時,很是不便。因而,開源社區中就出現了一系列將 SQLite API 進行封裝的庫,而 FMDB (https://github.com/ccgus/fmdb) 則是開源社區中的優秀者。FMDB 同時兼容 ARC 和非 ARC 工程,會自動根據工程配置來調整相關的內存管理代碼。並且他提供了多線程安全的數據庫操做方法,有效地防止數據混亂。html
FMDB是將sqlite封裝處理的,因此使用FMDB以前也必須導入libsqlite3.dylib框架。git
FMDB經常使用類github
FMDatabase : 一個單一的SQLite數據庫,用於執行SQL語句。sql
FMResultSet : 執行查詢一個FMDatabase結果集。 數據庫
FMDatabaseQueue :在多個線程來執行查詢和更新時會使用這個類。安全
NSString*path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES)lastObject];多線程
path = [path stringByAppendingString:@"testDB.sqlite"];框架
db = [FMDatabase databaseWithPath:path]; //指定路徑建立一個數據庫 dB是一個全局變量線程
一、testDB.sqlite不存在,系統會在路徑下自動建立一個數據庫。若在該路徑以前存在這樣的數據庫,不會重複建立。orm
二、若是path爲@"",系統會在一個臨時的目錄(並非沙盒中的temp文件,這個臨時目錄是系統自動分配的)本身建立一個數據庫,數據庫斷開鏈接後會自動刪除。
三、若是path爲nil,系統會在內存中建立一個數據庫,數據庫會在關閉後被銷燬。
0、數據庫操做前記得打開,操做結束後記得關閉
一、在FMDB中,除查詢之外的全部操做,都稱爲「更新」。例如,create、drop、insert、update、delete等都採用executeUpdate來進行操做,select採用executeQuery操做。
二、executeUpdate方法返回一個BOOL值來代表是否操做成功。executeQuery方法返回一個FMResultSet(結果集),存放查詢到的結果。
一、?作佔位符的話,傳進來的值必須是對象類型。
二、FMDB的更新方法有不少,有興趣的朋友能夠都試試。
- (BOOL)executeUpdate:(NSString*)sql, ...
- (BOOL)executeUpdateWithFormat:(NSString*)format, ...
- (BOOL)executeUpdate:(NSString*)sql withArgumentsInArray:(NSArray *)arguments
二、sqlite的增刪改(沒有查),跟上面的格式其實都是同樣的。惟一的不一樣的就是sqlite語句。sqlite語句不會寫的直接百度搜索便可。
一、FMResultSet提供了不少方法來得到所需的格式的值:stringForColumn doubleForColumn boolForColumn等。不只能經過列名來取數據,還能經過列的下標取數據。
二、FMDB的查詢方法也有不少,一樣能夠試試
- (FMResultSet *)executeQuery:(NSString*)sql, ...
- (FMResultSet *)executeQueryWithFormat:(NSString*)format, ...
- (FMResultSet *)executeQuery:(NSString *)sql withArgumentsInArray:(NSArray *)arguments