iOS 中原生的 SQLite API 在使用上相當(dāng)不友好诫肠,在使用時,非常不便物独。于是,就出現(xiàn)了一系列將SQLite API進(jìn)行封裝的庫氯葬,例如 FMDB挡篓、PlausibleDatabase、sqlitepersistentobjects等帚称,FMDB 是一款簡潔官研、易用的封裝庫,這一篇文章簡單介紹下FMDB的使用世杀。coreData 與 FMDB 的區(qū)別:
coreData:自動生成 SQL 語句阀参,不能自己設(shè)置,個性化的瞻坝、優(yōu)化的等 SQL 語句不能實(shí)現(xiàn)蛛壳;
FMDB:可以自己定制不同的 SQL 語句,擴(kuò)展性好所刀;
一衙荐、在項(xiàng)目中添加FMDB庫,具體參見 使用手動導(dǎo)入或 pod
二浮创、在FMDB中有三個主要的類:
FMDatabase - 代表一個 SQLite 數(shù)據(jù)庫忧吟。用于執(zhí)行 SQL 語句。
FMResultSet - 代表 FMDatabase 執(zhí)行一個查詢的結(jié)果斩披。
FMDatabaseQueue - 如果你想在多個線程執(zhí)行查詢和更新,你會想要使用這個類溜族。這是“線程安全”一節(jié)中描述。
三垦沉、數(shù)據(jù)庫創(chuàng)建
只要滿足以下三條中的任意一條煌抒,一個 FMDatabase 就創(chuàng)建一個 SQLite 數(shù)據(jù)庫文件路徑:
1)當(dāng)數(shù)據(jù)庫文件不存在時,fmdb 會自己創(chuàng)建一個厕倍。
2)如果你傳入的參數(shù)是空串:@"" 寡壮,則 fmdb 會在臨時文件目錄下創(chuàng)建這個數(shù)據(jù)庫,數(shù)據(jù)庫斷開連接時,數(shù)據(jù)庫文件被刪除况既。
3)如果你傳入的參數(shù)是 NULL这溅,則它會建立一個在內(nèi)存中的數(shù)據(jù)庫,數(shù)據(jù)庫斷開連接時棒仍,數(shù)據(jù)庫文件被刪除悲靴。
四、打開數(shù)據(jù)庫
五降狠、關(guān)閉數(shù)據(jù)庫
六对竣、執(zhí)行更新
除了查詢操作庇楞,F(xiàn)MDB數(shù)據(jù)庫操作都執(zhí)行 executeUpdate 方法榜配,這個方法返回 BOOL 型。
以下是示例代碼:
七吕晌、執(zhí)行查詢
八蛋褥、事務(wù)
FMDatabase 可以開始提交事務(wù)通過調(diào)用一個適當(dāng)?shù)姆椒ɑ驁?zhí)行開始/結(jié)束事務(wù)的語句。
多語句和批處理:你可以使用 FMDatabase 的 executestatements:withresultblock:方法在字符串去處理多語句睛驳。
當(dāng)提供一個 SQL 語句給 fmdb 時烙心,在插入錢你不應(yīng)該試圖“清理”任何值。相反乏沸,你應(yīng)該使用標(biāo)準(zhǔn)的SQLite綁定的語法:
INSERT INTO myTable VALUES (?, ?, ?, ?)
另外淫茵,您也可以使用命名參數(shù)語法:
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 )
如果應(yīng)用中使用了多線程操作數(shù)據(jù)庫蹬跃,那么就需要使用 FMDatabaseQueue 來保證線程安全了匙瘪。 應(yīng)用中不可在多個線程中共同使用一個 FMDatabase 對象操作數(shù)據(jù)庫,這樣會引起數(shù)據(jù)庫數(shù)據(jù)混亂蝶缀。 為了多線程操作數(shù)據(jù)庫安全丹喻, FMDB 使用了 FMDatabaseQueue,使用 FMDatabaseQueue 很簡單翁都,首先用一個數(shù)據(jù)庫文件地址來初使化 FMDatabaseQueue碍论,然后就可以將一個閉包(block)傳入 inDatabase 方法中。 在閉包中操作數(shù)據(jù)庫柄慰,而不直接參與 FMDatabase 的管理鳍悠。
更多文章
CocoaPods開源庫的搭建
CocoaPods搭建私有庫
CocoaPods搭建私有庫遇到問題
CocoaPods私有庫的升級維護(hù)
SKStoreReviewController之程序內(nèi)評價
App應(yīng)用程序圖標(biāo)的動態(tài)更換
開源框架 MGJRouter_Swift
iOS的MVP設(shè)計(jì)模式
iOS插件化
iOS FMDB的使用
Swift之ReactiveSwift
OC之ReactiveCocoa
OC之ReactiveCocoa進(jìn)階
iOS 性能考慮