iOS開發(fā)中使用FMDB

前言

SQLite (http://www.sqlite.org/docs.html) 是一個輕量級的關(guān)系數(shù)據(jù)庫剩盒。iOS SDK 很早就支持了 SQLite,在使用時,只需要加入 libsqlite3.dylib 依賴以及引入 sqlite3.h 頭文件即可猖败。但是没隘,原生的 SQLite API 在使用上相當不友好,在使用時窘奏,非常不便嘹锁。于是,開源社區(qū)中就出現(xiàn)了一系列將 SQLite API 進行封裝的庫着裹,而 FMDB (https://github.com/ccgus/fmdb) 則是開源社區(qū)中的優(yōu)秀者领猾。

FMDB 在使用上相當方便。以下是一個簡單的例子:


可以看到骇扇,使用 FMDB 后的數(shù)據(jù)庫代碼清晰明了摔竿,比原生的 API 優(yōu)雅多了。另外少孝,F(xiàn)MDB 同時兼容 ARC 和非 ARC 工程继低,會自動根據(jù)工程配置來調(diào)整相關(guān)的內(nèi)存管理代碼。



使用說明

該使用說明主要翻譯自 fmdb 的 github 項目說明文檔:https://github.com/ccgus/fmdb

引入相關(guān)文件

首先將 FMDB 從 github 上 clone 下來韭山,然后將以下文件 copy 到你的工程中:

建立數(shù)據(jù)庫

建立數(shù)據(jù)庫只需要如下一行即可 , 當該文件不存在時郁季,fmdb 會自己創(chuàng)建一個。如果你傳入的參數(shù)是空串:@“” 钱磅,則 fmdb 會在臨時文件目錄下創(chuàng)建這個數(shù)據(jù)庫梦裂,如果你傳入的參數(shù)是 NULL,則它會建立一個在內(nèi)存中的數(shù)據(jù)庫盖淡。

FMDatabase*db=[FMDatabasedatabaseWithPath:@"/tmp/tmp.db"];

打開數(shù)據(jù)庫

使用如下語句年柠,如果打開失敗,可能是權(quán)限不足或者資源不足褪迟。通常打開完操作操作后冗恨,需要調(diào)用 close 方法來關(guān)閉數(shù)據(jù)庫。


執(zhí)行更新操作

除了 Select 操作之外味赃,其它的都是更新操作掀抹。更新操作使用如下方法,如果有錯誤心俗,可以用 error 參數(shù)中獲得傲武。

-[FMDatabaseexecuteUpdate:error:withArgumentsInArray:orVAList:]

執(zhí)行查詢操作

查詢操作示例如下蓉驹。注意:即使操作結(jié)果只有一行,也需要先調(diào)用 FMResultSet 的 next 方法揪利。


FMDB 提供如下多個方法來獲取不同類型的數(shù)據(jù):


通常情況下态兴,你并不需要關(guān)閉 FMResultSet,因為相關(guān)的數(shù)據(jù)庫關(guān)閉時疟位,F(xiàn)MResultSet 也會被自動關(guān)閉瞻润。

數(shù)據(jù)參數(shù)

通常情況下,你可以按照標準的 SQL 語句甜刻,用 ? 表示執(zhí)行語句的參數(shù)绍撞,如:

INSERTINTOmyTableVALUES(?,?,?)

然后,可以我們可以調(diào)用 executeUpdate 方法來將 ? 所指代的具體參數(shù)傳入罢吃,通常是用變長參數(shù)來傳遞進去的楚午,如下:

NSString*sql=@"insert into User (name, password) values (?, ?)";[dbexecuteUpdate:sql,user.name,user.password];

這里需要注意的是昭齐,參數(shù)必須是 NSObject 的子類尿招,所以象 int,double,bool 這種基本類型,需要封裝成對應(yīng)的包裝類才行阱驾,如下所示:


線程安全

如果我們的 app 需要多線程操作數(shù)據(jù)庫就谜,那么就需要使用 FMDatabaseQueue 來保證線程安全了。 切記不能在多個線程中共同一個 FMDatabase 對象并且在多個線程中同時使用里覆,這個類本身不是線程安全的丧荐,這樣使用會造成數(shù)據(jù)混亂等問題。

使用 FMDatabaseQueue 很簡單喧枷,首先用一個數(shù)據(jù)庫文件地址來初使化 FMDatabaseQueue虹统,然后就可以將一個閉包 (block) 傳入 inDatabase 方法中。 在閉包中操作數(shù)據(jù)庫隧甚,而不直接參與 FMDatabase 的管理车荔。


工具

為了查看 Sqlite 中的數(shù)據(jù),一個好的圖形化界面的數(shù)據(jù)庫管理程序是必不可少的戚扳。mysql 有 phpMyAdmin忧便,那么 sqlite 呢?

我主要使用的是 Firefox 的一個名為 SQLite Manager 的插件帽借,安裝此插件后珠增,可以直接打開后綴名為 sqlite 的數(shù)據(jù)庫文件。SQLite Manager 提供一個圖形化的界面來執(zhí)行數(shù)據(jù)查詢或更改操作砍艾。如下圖所示:

總結(jié)

FMDB 將 SQLite API 進行了很友好的封裝蒂教,使用上非常方便,對于那些使用純 Sqlite API 來進行數(shù)據(jù)庫操作的 app脆荷,可以考慮將其遷移到基于 FMDB 上凝垛,這對于以后數(shù)據(jù)庫相關(guān)功能的開發(fā)維護,可以提高不少效率。


大數(shù)據(jù)量苔严,高并發(fā)時定枷,通常使用sqlite3作為數(shù)據(jù)庫;而使用fmdb管理更加簡單有效届氢!


iOS/Mac 開發(fā)博客列表(不斷更新中)

作為一個iOS開發(fā)要看的網(wǎng)站欠窒,一定對你有用的,相信我退子!

提高iOS開發(fā)效率的方法和工具

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末岖妄,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子寂祥,更是在濱河造成了極大的恐慌荐虐,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件丸凭,死亡現(xiàn)場離奇詭異福扬,居然都是意外死亡,警方通過查閱死者的電腦和手機惜犀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進店門铛碑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人虽界,你說我怎么就攤上這事汽烦。” “怎么了莉御?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵撇吞,是天一觀的道長。 經(jīng)常有香客問我礁叔,道長牍颈,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任晴圾,我火速辦了婚禮颂砸,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘死姚。我一直安慰自己人乓,他們只是感情好,可當我...
    茶點故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布都毒。 她就那樣靜靜地躺著色罚,像睡著了一般。 火紅的嫁衣襯著肌膚如雪账劲。 梳的紋絲不亂的頭發(fā)上戳护,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天金抡,我揣著相機與錄音,去河邊找鬼腌且。 笑死梗肝,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的铺董。 我是一名探鬼主播巫击,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼精续!你這毒婦竟也來了坝锰?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤重付,失蹤者是張志新(化名)和其女友劉穎顷级,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體确垫,經(jīng)...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡弓颈,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了森爽。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片恨豁。...
    茶點故事閱讀 39,919評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖爬迟,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情菊匿,我是刑警寧澤付呕,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站跌捆,受9級特大地震影響徽职,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜佩厚,卻給世界環(huán)境...
    茶點故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一姆钉、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧抄瓦,春花似錦潮瓶、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至煞额,卻和暖如春思恐,著一層夾襖步出監(jiān)牢的瞬間沾谜,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工胀莹, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留基跑,地道東北人。 一個月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓描焰,卻偏偏與公主長得像涩僻,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子栈顷,可洞房花燭夜當晚...
    茶點故事閱讀 44,864評論 2 354

推薦閱讀更多精彩內(nèi)容