iOS FMDB使用詳解

什么是FMDB

很簡(jiǎn)單,一個(gè)iOS中SQLite API的封裝庫(kù)裕循。

其他的巴拉巴拉一大堆總結(jié)下來(lái)就是:

1.是對(duì)libsqlite3庫(kù)的封裝臣嚣,使用起來(lái)簡(jiǎn)潔、高效剥哑,沒(méi)有原來(lái)的一大堆晦澀難懂硅则、影響開(kāi)發(fā)效率的C語(yǔ)句,更加面向?qū)ο?/p>

2.非常的輕量化株婴、靈活

3.對(duì)于多線程的并發(fā)操作進(jìn)行了處理怎虫,是線程安全的(重要特性之一)

4.因?yàn)樗荗C語(yǔ)言封裝的,只能在ios開(kāi)發(fā)的時(shí)候使用督暂,所以在實(shí)現(xiàn)跨平臺(tái)操作的時(shí)候存在局限性

FMDB重要(常用)類(lèi)

FMDatabase:一個(gè)FMDatabase對(duì)象就代表一個(gè)單獨(dú)的SQLite數(shù)據(jù)庫(kù)(注意并不是表)揪垄,用來(lái)執(zhí)行SQL語(yǔ)句

FMResultSet:使用FMDatabase執(zhí)行查詢(xún)后的結(jié)果集

FMDatabaseQueue:用于在多線程中執(zhí)行多個(gè)查詢(xún)或更新,它是線程安全的

FMDB的使用步驟詳解

1.準(zhǔn)備步驟(基礎(chǔ)操作)

1.項(xiàng)目中導(dǎo)入FMDBGithub地址

Cocoapods導(dǎo)入(推薦),什么你還沒(méi)有使用Cocoapods逻翁,那么就太out了,為了不被社會(huì)所淘汰捡鱼,趕緊學(xué)起來(lái)吧唐巧-用CocoaPods做iOS程序的依賴(lài)管理/CocoaPods使用詳解

手動(dòng)下載工程八回,并導(dǎo)入

2.導(dǎo)入libsqlite3框架(一般情況下默認(rèn)是導(dǎo)入的,所以一般都不用做這一步),細(xì)心的朋友可能會(huì)發(fā)現(xiàn)我們的庫(kù)中還有一個(gè)libsqlite3.0框架驾诈,那么它們倆有什么區(qū)別呢

libsqlite3的導(dǎo)入步驟.png

3.在需要用到FMDB的控制器(或模型)地方import FMDatabase.h

FMDB的導(dǎo)入.png

4.新建一個(gè)繼承自NSObject的對(duì)象缠诅,這里我們使用student,接下來(lái)數(shù)據(jù)庫(kù)中增刪改查的對(duì)象就用stduent進(jìn)行操作示例

student對(duì)象.png

5.你已經(jīng)躍躍欲試了吧乍迄,別急管引,本地的.sqlite你現(xiàn)在還無(wú)法查看,這里非常推薦火狐瀏覽器中的插件 SQLite Manager

火狐瀏覽器插件.png

這里教大家一個(gè)快速打開(kāi)sqlite文件的小技巧闯两,在Finder中將.sqlite文件直接拖動(dòng)到SQLite Manager的打開(kāi)文件夾中褥伴,可以自動(dòng)尋址快速打開(kāi)

SQLite Manager界面.png

Finder中的.sqlite文件.png

sqlite文件打開(kāi)后的樣子.png

2.數(shù)據(jù)庫(kù)的創(chuàng)建

需要用到的全局變量(防止新手不理解代碼)

//1.獲取數(shù)據(jù)庫(kù)文件的路徑_docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES) lastObject];NSLog(@"%@",_docPath);mark_student =1;//設(shè)置數(shù)據(jù)庫(kù)名稱(chēng)NSString*fileName = [_docPath stringByAppendingPathComponent:@"student.sqlite"];//2.獲取數(shù)據(jù)庫(kù)_db = [FMDatabase databaseWithPath:fileName];if([_db open]) {NSLog(@"打開(kāi)數(shù)據(jù)庫(kù)成功");}else{NSLog(@"打開(kāi)數(shù)據(jù)庫(kù)失敗");}

這里我們可以打開(kāi)_docPath的路徑谅将,可以看到名為“student.sqlite”的數(shù)據(jù)庫(kù)已經(jīng)創(chuàng)建了

student.sqlite

3.表的創(chuàng)建

//3.創(chuàng)建表BOOLresult = [_db executeUpdate:@"CREATE TABLE IF NOT EXISTS t_student (id integer PRIMARY KEY AUTOINCREMENT, name text NOT NULL, age integer NOT NULL, sex text NOT NULL);"];if(result) {NSLog(@"創(chuàng)建表成功");}else{NSLog(@"創(chuàng)建表失敗");}

使用火狐瀏覽器的SQLite Manager插件打開(kāi)student.sqlite可以看到t_student表已經(jīng)被創(chuàng)建

t_student表

4.添加數(shù)據(jù)

//插入數(shù)據(jù)NSString*name = [NSStringstringWithFormat:@"王子涵%@",@(mark_student)];intage = mark_student;NSString*sex =@"男";mark_student ++;//1.executeUpdate:不確定的參數(shù)用?來(lái)占位(后面參數(shù)必須是oc對(duì)象重慢,饥臂;代表語(yǔ)句結(jié)束)BOOLresult = [_db executeUpdate:@"INSERT INTO t_student (name, age, sex) VALUES (?,?,?)",name,@(age),sex];//2.executeUpdateWithForamat:不確定的參數(shù)用%@,%d等來(lái)占位 (參數(shù)為原始數(shù)據(jù)類(lèi)型似踱,執(zhí)行語(yǔ)句不區(qū)分大小寫(xiě))//? ? BOOL result = [_db executeUpdateWithFormat:@"insert into t_student (name,age, sex) values (%@,%i,%@)",name,age,sex];//3.參數(shù)是數(shù)組的使用方式//? ? BOOL result = [_db executeUpdate:@"INSERT INTO t_student(name,age,sex) VALUES? (?,?,?);" withArgumentsInArray:@[name,@(age),sex]];if(result) {NSLog(@"插入成功");}else{NSLog(@"插入失敗");}

多插入幾次后隅熙,我們可以看到t_student表中添加了多條數(shù)據(jù)

添加的數(shù)據(jù)

5.刪除數(shù)據(jù)

//1.不確定的參數(shù)用?來(lái)占位 (后面參數(shù)必須是oc對(duì)象,需要將int包裝成OC對(duì)象)intidNum =11;BOOLresult = [_db executeUpdate:@"delete from t_student where id = ?",@(idNum)];//2.不確定的參數(shù)用%@核芽,%d等來(lái)占位//BOOL result = [_db executeUpdateWithFormat:@"delete from t_student where name = %@",@"王子涵"];if(result) {NSLog(@"刪除成功");}else{NSLog(@"刪除失敗");}

6.修改數(shù)據(jù)

//修改學(xué)生的名字NSString*newName =@"李浩宇";NSString*oldName =@"王子涵2";BOOLresult = [_db executeUpdate:@"update t_student set name = ? where name = ?",newName,oldName];if(result) {NSLog(@"修改成功");}else{NSLog(@"修改失敗");}

查看sqlite囚戚,可以看到王子涵2的姓名已經(jīng)被修改了

王子涵2姓名修改為了李浩宇

7.查詢(xún)數(shù)據(jù)

//查詢(xún)整個(gè)表FMResultSet * resultSet = [_db executeQuery:@"select * from t_student"];//根據(jù)條件查詢(xún)//FMResultSet * resultSet = [_db executeQuery:@"select * from t_student where id < ?", @(4)];//遍歷結(jié)果集合while([resultSet next]) {intidNum = [resultSet intForColumn:@"id"];NSString*name = [resultSet objectForColumnName:@"name"];intage = [resultSet intForColumn:@"age"];NSString*sex = [resultSet objectForColumnName:@"sex"];NSLog(@"學(xué)號(hào):%@ 姓名:%@ 年齡:%@ 性別:%@",@(idNum),name,@(age),sex);}

執(zhí)行查詢(xún)之后控制臺(tái)的打印,可以看到打印出了目前的所有數(shù)據(jù)

執(zhí)行查詢(xún)數(shù)據(jù)后控制臺(tái)的打印結(jié)果

8.表的刪除

//如果表格存在 則銷(xiāo)毀BOOLresult = [_db executeUpdate:@"drop table if exists t_student"];if(result) {NSLog(@"刪除表成功");}else{NSLog(@"刪除表失敗");}

執(zhí)行之后轧简,刷新SQLite弯淘,可以看到t_student表已經(jīng)被刪除了

刷新SQLite

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市吉懊,隨后出現(xiàn)的幾起案子庐橙,更是在濱河造成了極大的恐慌,老刑警劉巖借嗽,帶你破解...
    沈念sama閱讀 222,000評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件态鳖,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡恶导,警方通過(guò)查閱死者的電腦和手機(jī)浆竭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)惨寿,“玉大人邦泄,你說(shuō)我怎么就攤上這事×芽眩” “怎么了顺囊?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,561評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)蕉拢。 經(jīng)常有香客問(wèn)我特碳,道長(zhǎng),這世上最難降的妖魔是什么晕换? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,782評(píng)論 1 298
  • 正文 為了忘掉前任午乓,我火速辦了婚禮,結(jié)果婚禮上闸准,老公的妹妹穿的比我還像新娘益愈。我一直安慰自己,他們只是感情好夷家,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,798評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布蒸其。 她就那樣靜靜地躺著敏释,像睡著了一般。 火紅的嫁衣襯著肌膚如雪枣接。 梳的紋絲不亂的頭發(fā)上颂暇,一...
    開(kāi)封第一講書(shū)人閱讀 52,394評(píng)論 1 310
  • 那天,我揣著相機(jī)與錄音但惶,去河邊找鬼耳鸯。 笑死,一個(gè)胖子當(dāng)著我的面吹牛膀曾,可吹牛的內(nèi)容都是我干的县爬。 我是一名探鬼主播,決...
    沈念sama閱讀 40,952評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼添谊,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼财喳!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起斩狱,我...
    開(kāi)封第一講書(shū)人閱讀 39,852評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤耳高,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后所踊,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體泌枪,經(jīng)...
    沈念sama閱讀 46,409評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,483評(píng)論 3 341
  • 正文 我和宋清朗相戀三年秕岛,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了碌燕。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,615評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡继薛,死狀恐怖修壕,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情遏考,我是刑警寧澤慈鸠,帶...
    沈念sama閱讀 36,303評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站诈皿,受9級(jí)特大地震影響林束,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜稽亏,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,979評(píng)論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望缕题。 院中可真熱鬧截歉,春花似錦、人聲如沸烟零。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,470評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至宵睦,卻和暖如春记罚,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背壳嚎。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,571評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工桐智, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人烟馅。 一個(gè)月前我還...
    沈念sama閱讀 49,041評(píng)論 3 377
  • 正文 我出身青樓说庭,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親郑趁。 傳聞我的和親對(duì)象是個(gè)殘疾皇子刊驴,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,630評(píng)論 2 359

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