IOS-FMDB使用

基類

  • FMDatabase:是一個提供 SQLite 數(shù)據(jù)庫的類,用于執(zhí)行 SQL 語句兔港。
  • FMResultSet:用在 FMDatabase 中執(zhí)行查詢的結(jié)果的類。
  • FMDatabaseQueue:在多線程下查詢和更新數(shù)據(jù)庫用到的類。

導(dǎo)入:

  • pod后---> 導(dǎo)入libsqlite3.0框架荡含,導(dǎo)入頭文件FMDatabase.h

步驟實現(xiàn),與SQLite使用步驟相似届垫。

1释液、創(chuàng)建數(shù)據(jù)庫路徑,

數(shù)據(jù)庫創(chuàng)建
創(chuàng)建FMDatabase對象時參數(shù)為SQLite數(shù)據(jù)庫文件路徑装处,該路徑可以是以下三種方式之一

1.文件路徑误债。該文件路徑無需真實存在,如果不存在會自動創(chuàng)建

2.空字符串(@“”)妄迁。表示會在臨時目錄創(chuàng)建一個空的數(shù)據(jù)庫寝蹈,當(dāng)FMDatabase連接關(guān)閉時,文件也會被刪除

3.NULL登淘。將創(chuàng)建一個內(nèi)在數(shù)據(jù)庫箫老,同樣的,當(dāng)FMDatabase連接關(guān)閉時黔州,數(shù)據(jù)將會被銷毀

2耍鬓、獲得數(shù)據(jù)庫路徑阔籽,

//1.獲得數(shù)據(jù)庫文件的路徑
NSString *doc =[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES)  lastObject];                  

NSString *fileName = [doc stringByAppendingPathComponent:@“student.sqlite”];

3、打開數(shù)據(jù)庫牲蜀,創(chuàng)建一個索引是id的字符串類型name和integer類型age

//2.獲得數(shù)據(jù)庫
FMDatabase *db = [FMDatabase databaseWithPath:fileName];
//3.使用如下語句笆制,如果打開失敗,可能是權(quán)限不足或者資源不足涣达。通常打開完操作操作后在辆,需要調(diào)用 close 方法來關(guān)閉數(shù)據(jù)庫。在和數(shù)據(jù)庫交互 之前峭判,數(shù)據(jù)庫必須是打開的开缎。如果資源或權(quán)限不足無法打開或創(chuàng)建數(shù)據(jù)庫棕叫,都會導(dǎo)致打開失敗林螃。
if ([db open])
{
    //4.創(chuàng)表
    BOOL result = [db executeUpdate:@“CREATE TABLE IF NOT EXISTS t_student (id integer PRIMARY KEY AUTOINCREMENT, name text NOT NULL, age integer NOT NULL);”];
    if (result)
    {
        NSLog(@“創(chuàng)建表成功”);
    }else{
        NSLog(@“創(chuàng)建表失敗”);
    }
}

4、然后對數(shù)據(jù)庫進行增俺泣、刪疗认、改、查操作伏钠,

一切不是SELECT命令的命令都視為更新横漏。這包括 CREAT,UPDATE,INSERT,ALTER,BEGIN,COMMIT,DETACH,DELETE,DROP,END,EXPLAIN,VACUUM,REPLACE等。
簡單來說熟掂,只要不是以SELECT開頭的命令都是更新命令缎浇。
執(zhí)行更新返回一個BOOL值。YES表示 執(zhí)行成功赴肚,否則表示有錯誤素跺。你可以調(diào)用 -lastErrorMessage 和 -lastErrorCode方法來得到更多信息。
  • 使用FMDataBase類的3種方式執(zhí)行數(shù)據(jù)庫插入命令SQLinsert into
int age = 42;

//1.executeUpdate:不確定的參數(shù)用誉券?來占位(后面參數(shù)必須是oc對象指厌,;代表語句結(jié)束)
[self.db executeUpdate:@“INSERT INTO t_student (name, age) VALUES (?,?);”,name,@(age)];

//2.executeUpdateWithForamat:不確定的參數(shù)用%@踊跟,%d等來占位 (參數(shù)為原始數(shù)據(jù)類型踩验,執(zhí)行語句不區(qū)分大小寫)
[self.db executeUpdateWithForamat:@“insert into t_student (name,age) values (%@,%i);”,name,age];
     
//3.參數(shù)是數(shù)組的使用方式
[self.db executeUpdate:@“INSERT INTO     
t_student(name,age) VALUES  (?,?);”withArgumentsInArray:@[name,@(age)]];

  • 使用FMDataBase類執(zhí)行數(shù)據(jù)庫刪除命令SQLdelete
//1.不確定的參數(shù)用?來占位 (后面參數(shù)必須是oc對象,需要將int包裝成OC對象)
int idNum = 101;
[self.db executeUpdate:@“delete from t_student where id = ?;”,@(idNum)];

//2.不確定的參數(shù)用%@商玫,%d等來占位
[self.db executeUpdateWithFormat:@“delete from t_student where name = %@;”,@“apple_name”];

  • 使用FMDataBase類執(zhí)行數(shù)據(jù)庫修改命令SQLupdate
//修改學(xué)生的名字
[self.db executeUpdate:@“update t_student set name = ? where name = ?”,newName,oldName];
  • 使用FMDataBase類執(zhí)行數(shù)據(jù)庫查詢命令SQLselect ... from
SELECT命令就是查詢箕憾,執(zhí)行查詢的方法是以-excuteQuery開頭的。
執(zhí)行查詢時拳昌,如果成功返回FMResultSet對象袭异,錯誤返回nil。與執(zhí)行更新相當(dāng)地回,支持使用NSError參數(shù)扁远。
同時俊鱼,你也可以使用-lastErrorCode和-lastErrorMessage獲知錯誤信息。
FMResultSet獲取不同數(shù)據(jù)格式的方法

intForColumn:

longForColumn:

longLongIntForColumn:

boolForColumn:

doubleForColumn:

stringForColumn:

dataForColumn:

dataNoCopyForColumn:

UTF8StringForColumnIndex:

objectForColumn:

  • 使用FMResultSet獲取查詢語句結(jié)果
//查詢整個表
FMResultSet *resultSet = [self.db execute Query:@“select * from t_student;”];
 
 //根據(jù)條件查詢
FMResultSet *resultSet = [self.db executeQuery:@“select * from t_student where id<?;”@(14)];

 //遍歷結(jié)果集合   
  
while ([resultSet  next])
 
  {
    int idNum = [resultSet intForColumn:@“id”]畅买;

    NSString *name = [resultSet    
    objectForColumn:@“name”];
   
    int age = [resultSet intForColumn:@“age”];
  }

  • 使用FMDataBase類執(zhí)行數(shù)據(jù)庫銷毀命令SQLdrop ...
//如果表格存在 則銷毀
[self.db executeUpadate:@“drop table if exists t_student;”];
  • 使用FMDatabaseQueue類實現(xiàn)多線程操作
在多個線程中同時使用一個FMDatabase實例是不明智的〔⑾校現(xiàn)在你可以為每 個線程創(chuàng)建一個FMDatabase對象,不要讓多個線程分享同一個實例谷羞,他無 法在多個線程中同事使用帝火。否則程序會時不時崩潰或者報告異常。所以湃缎,不要 初始化FMDatabase對象犀填,然后在多個線程中使用。這時候嗓违,我們就需要使 用FMDatabaseQueue來創(chuàng)建隊列執(zhí)行事務(wù)九巡。
//1.創(chuàng)建隊列
 FMDatabaseQueue *queue = [FMDatabaseQueue   
 databaseQueueWithPath:aPath];
  __block BOOL whoopsSomethingWrongHappened = true;
  
 //2.把任務(wù)包裝到事務(wù)里
 [queue inTransaction:^(FMDatabase *db, BOOL *rollback) 
  {  
 whoopsSomethingWrongHappened &=  [db     executeUpdate:@“INSERT INTO myTable VALUES (?)”,    [NSNumber numberWith:1]];
whoopsSomethingWrongHappened &= [db
executeUpdata:@“INSERT INTO myTable VALUES (?)”, 
[NSNumber numberWithInt:2]];

whoopsSomethingWrongHappened &= [db  
executeUpdata:@“INSERT INTO myTable VALUES (?)”[NSNumber  
numberWithInt:3]];
//如果有錯誤 返回
if (!whoopsSomethingWrongHappened)
  { 
    *rollback = YES;
      return;
  }
}];

5、最后關(guān)閉數(shù)據(jù)庫蹂季。

[_db close];
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末冕广,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子偿洁,更是在濱河造成了極大的恐慌撒汉,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,188評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件涕滋,死亡現(xiàn)場離奇詭異睬辐,居然都是意外死亡,警方通過查閱死者的電腦和手機宾肺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評論 3 395
  • 文/潘曉璐 我一進店門溯饵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人爱榕,你說我怎么就攤上這事瓣喊。” “怎么了黔酥?”我有些...
    開封第一講書人閱讀 165,562評論 0 356
  • 文/不壞的土叔 我叫張陵藻三,是天一觀的道長。 經(jīng)常有香客問我跪者,道長棵帽,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,893評論 1 295
  • 正文 為了忘掉前任渣玲,我火速辦了婚禮逗概,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘忘衍。我一直安慰自己逾苫,他們只是感情好卿城,可當(dāng)我...
    茶點故事閱讀 67,917評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著铅搓,像睡著了一般瑟押。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上星掰,一...
    開封第一講書人閱讀 51,708評論 1 305
  • 那天多望,我揣著相機與錄音,去河邊找鬼氢烘。 笑死怀偷,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的播玖。 我是一名探鬼主播椎工,決...
    沈念sama閱讀 40,430評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼黎棠!你這毒婦竟也來了晋渺?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,342評論 0 276
  • 序言:老撾萬榮一對情侶失蹤脓斩,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后畴栖,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體随静,經(jīng)...
    沈念sama閱讀 45,801評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,976評論 3 337
  • 正文 我和宋清朗相戀三年吗讶,在試婚紗的時候發(fā)現(xiàn)自己被綠了燎猛。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,115評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡照皆,死狀恐怖重绷,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情膜毁,我是刑警寧澤昭卓,帶...
    沈念sama閱讀 35,804評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站瘟滨,受9級特大地震影響候醒,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜杂瘸,卻給世界環(huán)境...
    茶點故事閱讀 41,458評論 3 331
  • 文/蒙蒙 一倒淫、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧败玉,春花似錦敌土、人聲如沸镜硕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽谦疾。三九已至,卻和暖如春犬金,著一層夾襖步出監(jiān)牢的瞬間念恍,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評論 1 272
  • 我被黑心中介騙來泰國打工晚顷, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留峰伙,地道東北人。 一個月前我還...
    沈念sama閱讀 48,365評論 3 373
  • 正文 我出身青樓该默,卻偏偏與公主長得像瞳氓,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子栓袖,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,055評論 2 355

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

  • 優(yōu)秀的第三方庫匣摘,README 也是很優(yōu)秀的,理解了 README裹刮,會對使用帶來很多便利音榜。 ARC 和 MRC 項目...
    冷漠叻葒顏閱讀 78,047評論 46 233
  • 框架地址:[https://github.com/ccgus/fmdb] 下載框架Snip20160912_6.p...
    coder_hong閱讀 1,388評論 0 2
  • FMDB 1.簡介 FMDB 是iOS平臺的SQLite數(shù)據(jù)庫框架,它是以O(shè)C的方式封裝了SQLite的C語...
    風(fēng)___________閱讀 258評論 0 0
  • 一捧弃、FMDB簡介 什么是FMDBFMDB是iOS平臺的SQLite數(shù)據(jù)庫 框架FMDB以面向OC的方式封裝了SQL...
    iOS_成才錄閱讀 17,401評論 11 83
  • 經(jīng)常會出去參加一些學(xué)習(xí)和培訓(xùn)赠叼,因為都是自己主動花錢出去的,所以每次培訓(xùn)其實都很享受违霞,并沒有覺得很痛苦嘴办。這次...
    燕妮老師說閱讀 1,176評論 0 1