FMDB的使用

iOS 中原生的 SQLite API 在使用上相當不友好,在使用時,非常不便。于是,就出現了一系列將SQLite API進行封裝的庫,例如 FMDB、PlausibleDatabase、sqlitepersistentobjects等,FMDB 是一款簡潔、易用的封裝庫,這一篇文章簡單介紹下FMDB的使用。coreData 與 FMDB 的區別:
coreData:自動生成 SQL 語句,不能自己設置,個性化的、優化的等 SQL 語句不能實現;
FMDB:可以自己定制不同的 SQL 語句,擴展性好;

一、在項目中添加FMDB庫,具體參見 使用手動導入或 pod

二、在FMDB中有三個主要的類:
FMDatabase - 代表一個 SQLite 數據庫。用于執行 SQL 語句。
FMResultSet - 代表 FMDatabase 執行一個查詢的結果。
FMDatabaseQueue - 如果你想在多個線程執行查詢和更新,你會想要使用這個類。這是“線程安全”一節中描述。

三、數據庫創建
只要滿足以下三條中的任意一條,一個 FMDatabase 就創建一個 SQLite 數據庫文件路徑:
1)當數據庫文件不存在時,fmdb 會自己創建一個。
2)如果你傳入的參數是空串:@"" ,則 fmdb 會在臨時文件目錄下創建這個數據庫,數據庫斷開連接時,數據庫文件被刪除。
3)如果你傳入的參數是 NULL,則它會建立一個在內存中的數據庫,數據庫斷開連接時,數據庫文件被刪除。


1.jpg

四、打開數據庫


五、關閉數據庫


六、執行更新
除了查詢操作,FMDB數據庫操作都執行 executeUpdate 方法,這個方法返回 BOOL 型。



以下是示例代碼:


七、執行查詢



八、事務
FMDatabase 可以開始提交事務通過調用一個適當的方法或執行開始/結束事務的語句。

多語句和批處理:你可以使用 FMDatabase 的 executestatements:withresultblock:方法在字符串去處理多語句。



當提供一個 SQL 語句給 fmdb 時,在插入錢你不應該試圖“清理”任何值。相反,你應該使用標準的SQLite綁定的語法:
INSERT INTO myTable VALUES (?, ?, ?, ?)




另外,您也可以使用命名參數語法:
INSERT INTO authors (identifier, name, date, comment) VALUES (:identifier, :name, :date, :comment)

The parameters must start with a colon. SQLite itself supports other characters, but internally the dictionary keys are prefixed with a colon, do not include the colon in your dictionary keys.



The key point is that one should not use NSString method stringWithFormat to manually insert values into the SQL statement, itself. Nor should one Swift string interpolation to insert values into the SQL. Use ? placeholders for values to be inserted into the database (or used in WHERE clauses in SELECT statements).

九、使用 FMDatabaseQueue 和線程安全(具體參照 FMDB 的 github 的readMe )
如果應用中使用了多線程操作數據庫,那么就需要使用 FMDatabaseQueue 來保證線程安全了。 應用中不可在多個線程中共同使用一個 FMDatabase 對象操作數據庫,這樣會引起數據庫數據混亂。 為了多線程操作數據庫安全, FMDB 使用了 FMDatabaseQueue,使用 FMDatabaseQueue 很簡單,首先用一個數據庫文件地址來初使化 FMDatabaseQueue,然后就可以將一個閉包(block)傳入 inDatabase 方法中。 在閉包中操作數據庫,而不直接參與 FMDatabase 的管理。


更多文章

CocoaPods開源庫的搭建
CocoaPods搭建私有庫
CocoaPods搭建私有庫遇到問題
CocoaPods私有庫的升級維護
SKStoreReviewController之程序內評價
App應用程序圖標的動態更換
開源框架 MGJRouter_Swift
iOS的MVP設計模式
iOS插件化
iOS FMDB的使用
Swift之ReactiveSwift
OC之ReactiveCocoa
OC之ReactiveCocoa進階
iOS 性能考慮

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • SQLite函數總結 1.打開數據庫 int sqlite3_open( const char *filename...
    藍心兒的藍色之旅閱讀 743評論 0 0
  • 要使用FMDB,先要添加庫文件libsqlite3.tbd FMDB的介紹 FMDB是iOS平臺的SQLite數據...
    小球why閱讀 928評論 0 4
  • iOS中原生的SQLite API在使用上相當不友好,在使用時,非常不便。于是,就出現了一系列將SQLite AP...
    南衍兒閱讀 2,076評論 0 0
  • 經常用FMDB,但是沒怎么研究,正好有時間仔細看一看。怕看過的東西過段時間忘記了,所以記錄一下。FMDB GitH...
    NAVER_say_NAVER閱讀 956評論 0 0
  • FMDB介紹 FMDB是一款簡潔、易用的封裝庫。因此,在這里推薦使用第三方框架FMDB,它是對libsqlite3...
    Carson_Zhu閱讀 4,920評論 1 4