FMDB 我的SQLite救星

2021-08-31 16:59:56 字數 3493 閱讀 6220

13 則迴響   發文作者  bonjouryentinglai   於 2011/03/20

5 votes

好滴~離上次發文又給他隔了三個月,為什麼咧??因為林盃我很忙,這三個月我跑去訂婚、結婚、歸寧外加峇裡島蜜月,所以部落格就這麼給他放著了。以為這裡不會再更新的朋友們~快回來哦~有新文章了。

這次要分享的是在ios中使用sqlite。其實我對sqlite一點概念都沒有,因為一直沒有機會使用它。有時候突然想到,就會找幾本手邊的工具 書或在網路上找尋在ios中使用sqlite的教學。但是每次學,每次失敗,讓我愈來愈討厭sqlite 囧。直到有一次在網路上發現了fmdb這個東 西,才發現不是sqlite很難學,而是sqlite的c api對初學者來說實在太麻煩太瑣碎,難度太高,難怪我怎麼學都學不會。fmdb說穿了其實只是把c api包裝成簡單易用的objective-c物件。不過這對我這個sqlite初學者來說,可是大大減低了上手的難度。有了fmdb,寫程式時只要專心 在sqlite的語法上,而不用去理那堆有看沒有懂的c api,實在是件快樂的事情。

廢話不多說,先來安裝fmdb吧!

首先到這裡 下載 fmdb的source code,接著在解開的檔案裡,把src資料夾下除了fmdb.m的檔案加入到自己的ios專案,最後在專案中加入libsqlite3.dylib這個 函式庫就可以了。啥?有人問為什麼不用加入fmdb.m?簡單講,這個檔案是fmdb的使用說明。裡面的註解清楚,範例又簡單,如果有興趣,直接看 fmdb.m,大概就會用fmdb了。

以下介紹幾個常用的指令,分享給大家:

-開啟/關閉資料庫

使用資料庫的第一件事,就是建立乙個資料庫。要注意的是,在ios環境下,只有document directory 是可以進行讀寫的。在寫程式時用的那個resource資料夾底下的東西都是read-only。因此,建立的資料庫要放在document 資料夾下。方法如下:

nsarray *paths = nssearchpathfordirectoriesindomains(nsdocumentdirectory, nsuserdomainmask, yes);

nsstring *documentdirectory = [paths objectatindex:0];

fmdatabase

*db = [fmdatabase databasewithpath:dbpath] ;

if (![db open]) {

nslog(@「could not open db.」);

return ;

通常這段程式碼會放在uiviewcontroller中viewdidload的函式裡。指定路徑後,用[fmdatabase databasewithpath:]回傳乙個fmdatabase物件,如果該路徑本來沒有檔案,會新增檔案,不然會開啟舊檔。最後呼叫[db open]可以開啟該資料庫檔案,[db close]則關閉該檔案。

-建立table

如果是新建的資料庫檔,一開始是沒有table的。建立table的方式很簡單:

[db executeupdate:@"create table personlist (name text, age integer, *** integer, phone text, address text, photo blob)"];

這是fmdb裡很常用的指令,[fmdatabase_object executeupdate:]後面用nsstring塞入sqlite語法,就解決了。因為這篇主要是在講fmdb,所以sqlite的語法就不多說 了,上述程式碼建立了乙個名為personlist的table,裡面有姓名、年齡、性別、電話、位址和**。(嗯….很範例的乙個table)

-插入資料

插入資料跟前面一樣,用executeupdate後面加語法就可以了。比較不同的是,因為插入的資料會跟objective-c的變數有關,所以在string裡使用?號來代表這些變數。

[db executeupdate:@"insert into personlist (name, age, ***, phone, address, photo) values (?,?,?,?,?,?)",

@"jone", [nsnumber numberwithint:20], [nsnumber numberwithint:0], @「091234567」, @「taiwan, r.o.c」, [nsdata datawithcontentsoffile:  filepath ]];

其中,在sqlite中的text對應到的是nsstring,integer對應nsnumber,blob則是nsdata。該做的轉換fmdb都做好了,只要了解sqlite語法,應該沒有什麼問題才是。

-更新資料

太簡單了,不想講,請看範例:

[db executeupdate:@"update personlist set age = ? where name = ?",[nsnumber numberwithint:30],@「john」];

-取得資料

取得特定的資料,則需使用fmresultset物件接收傳回的內容:

fmresultset *rs = [db executequery:@"select name, age, from personlist"];

while ([rs next]) {

nsstring *name = [rs stringforcolumn:@"name"];

int age = [rs intforcolumn:@"age"];

[rs close];

用[rs next]可以輪詢query回來的資料,每一次的next可以得到乙個row裡對應的數值,並用[rs stringforcolumn:]或[rs intforcolumn:]等方法把值轉成object-c的型態。取用完資料後則用[rs close]把結果關閉。

-快速取得資料

在有些時候,只會query某乙個row裡特定的乙個數值(比方只是要找john的年齡),fmdb提供了幾個比較簡便的方法。這些方法定義在fmdatabaseadditions.h,如果要使用,記得先import進來。

//找位址

nsstring *address = [db stringforquery:@"select address from personlist where name = ?",@"john」];

//找年齡

int age = [db intforquery:@"select age from personlist where name = ?",@"john」];

大概就是這樣囉~對於在objective-c上使用sqlite有困難的朋友,看完之後是不是覺得一切都變的很簡單呢?趕快去試試吧~

FMDB對sqlite的操作

首先要先導入第三方類庫fmdatabase 獲得存放資料庫檔案的沙盒位址 nsstring databasefilepath 建立資料庫的操作 void creatdatabase 建立表 void creattable 判斷資料庫是否已經開啟,如果沒有開啟,提示失敗 if dbopen 為資料庫設...

sqlite 操作 使用FMDB

alter table table name add column column name column type 例如在student表中新增一列名為name,型別為varchar alter table student add column name varchar alter table st...

iOS開發 SQLite重要框架FMDB的使用

什麼是fmdb fmdb是乙個和ios的sqlite資料庫操作相關的第三方框架。主要把c語言運算元據庫的 用oc進行了封裝。使用者只需呼叫該框架的api就能用來建立並連線資料庫,建立表,查詢等。為什麼要使用fmdb 1 輕量級,靈活。不消耗太多效能 2 fmdb將c語言的ios系統的sqlite資料...