FMDB資料庫(二)

2021-07-26 19:27:14 字數 4568 閱讀 2742

初識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:@「deletefrom t_student where id = ?;」,@(idnum)];

//2.不確定的引數用%@,%d等來佔位

[self.db executeupdatewithformat:@「delete

12

//修改學生的名字

[self.db executeupdate:@「update t_studentsetname = ? 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 tableifexists 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的使用...