初識fmdb
ios中原生的sqlite api在進行資料儲存的時候,需要使用c語言中的函式,操作比較麻煩。於是,就出現了一系列將sqlite api進行封裝的庫,例如fmdb、plausibledatabase、sqlitepersistentobjects等。
fmdb是一款簡潔、易用的封裝庫。因此,在這裡推薦使用第三方框架fmdb,它是對libsqlite3框架的封裝,用起來的步驟與sqlite使用類似,並且它對於多執行緒的併發操作進行了處理,所以是執行緒安全的。
fmdb pk sqlite
fmdb框架中重要的框架類
fmdb使用步驟
匯入libsqlite3.0框架,匯入標頭檔案fmdatabase.h
**實現,與sqlite使用步驟相似,建立資料庫路徑,獲得資料庫路徑,開啟資料庫,然後對資料庫進行增、刪、改、查操作,最後關閉資料庫。
資料庫建立
建立fmdatabase物件時引數為sqlite資料庫檔案路徑,該路徑可以是以下三種方式之一
資料庫使用fmdb框架**操作 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//1.獲得資料庫檔案的路徑
nsstring *doc =[nssearchpathfordirectoriesindomains(nsdocumentdirectory,nsuserdomainmask, yes) lastobject];
//2.獲得資料庫
fmdatabase *db = [fmdatabase databasewithpath:filename];
//3.使用如下語句,如果開啟失敗,可能是許可權不足或者資源不足。通常開啟完操作操作後,需要呼叫 close 方法來關閉資料庫。在和資料庫互動 之前,資料庫必須是開啟的。如果資源或許可權不足無法開啟或建立資料庫,都會導致開啟失敗。
if
([db open])
}
一切不是select命令的命令都視為更新。這包括 creat,update,insert,alter,begin,commit,detach,delete,drop,end,explain,vacuum,replace等。
簡單來說,只要不是以select開頭的命令都是更新命令。
執行更新返回乙個bool值。yes表示 執行成功,否則表示有錯誤。你可以呼叫 -lasterrormessage 和 -lasterrorcode方法來得到更多資訊。
1
2
3
4
5
6
7
8
int age = 42;
不確定的引數用?來佔位(後面引數必須是oc物件,;代表語句結束)
[self.db executeupdate:@「insert into t_student (name, age) values (?,?);」,name,@(age)];
不確定的引數用%@,%d等來佔位 (引數為原始資料型別,執行語句不區分大小寫)
[self.db executeupdatewithforamat:@「insert into t_student (name,age) values (%@,%i);」,name,age];
//3.引數是陣列的使用方式
[self.db executeupdate:@「insert into
t_student(name,age) values (?,?);」withargumentsinarray:@[name,@(age ? )]];
12
3
4
5
//1.不確定的引數用?來佔位 (後面引數必須是oc物件,需要將int包裝成oc物件)
int idnum = 101;
[self.db executeupdate:@「
delete
from t_student where id = ?;」,@(idnum)];
//2.不確定的引數用%@,%d等來佔位
[self.db executeupdatewithformat:@「
delete
12
//修改學生的名字
[self.db executeupdate:@「update t_student
set
name = ? where name = ?」,newname,oldname];
//查詢整個表
fmresultset *resultset = [self.db execute query:@「select * from t_student;」];
//根據條件查詢
fmresultset *resultset = [self.db executequery:@「select * from t_student where id
//遍歷結果集合
while ([resultset next])
1
2
//如果**存在 則銷毀
[self.db executeupadate:@「drop table
if
exists t_student;」];
在多個執行緒中同時使用乙個fmdatabase例項是不明智的。現在你可以為每 個執行緒建立乙個fmdatabase物件,不要讓多個執行緒分享同乙個例項,他無 法在多個執行緒中同事使用。否則程式會時不時崩潰或者報告異常。所以,不要 初始化fmdatabase物件,然後在多個執行緒中使用。這時候,我們就需要使 用fmdatabasequeue來建立佇列執行事務。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//1.建立佇列
fmdatabasequeue *queue = [fmdatabasequeue
databasequeuewithpath:apath];
true
;
//2.把任務包裝到事務裡
[queue intransaction:^(fmdatabase *db, bool *rollback)
}];
好了,到此為止,相信你已經能夠使用fmdb進行資料持久化了,它的好與壞 只有在不斷地使用過程中才能發現了解。所以,希望大家學會了以後還是要多 寫多練多使用。另外,誠心希望大家多提寶貴意見,或者溝通一些好的想法。
FMDB資料庫總結
這是本人自己整理的fmdb,如有問題請見諒並指出,謝謝!要用fmdb快取,首先要熟練使用sqlite指令,可以參考我的部落格文 下面是我寫的乙個小demo fmdb資料庫最常用的就是增刪改查,下面的demo主要是快取了從網上請求下來的一些和其對應的標題。可以滿足在斷網或再次執行應用的情況下介面有資料...
資料庫操作 使用FMDB
ios中原生的sqlite api在使用上相當不友好,在使用時,非常不便。於是,就出現了一系列將sqlite api進行封裝的庫,例如fmdb plausibledatabase sqlitepersistentobjects等,fmdb 是一款簡潔 易用的封裝庫,這一篇文章簡單介紹下fmdb的使用...
資料庫操作 使用FMDB
ios中原生的sqlite api在使用上相當不友好,在使用時,非常不便。於是,就出現了一系列將sqlite api進行封裝的庫,例如fmdb plausibledatabase sqlitepersistentobjects等,fmdb 是一款簡潔 易用的封裝庫,這一篇文章簡單介紹下fmdb的使用...