日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

sqlite第三方类库FMDB的使用

發(fā)布時間:2025/4/14 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sqlite第三方类库FMDB的使用 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

? ? ? ?FMDB是ios平臺下解析sqlite的第三方數(shù)據(jù)庫管理框架,使用非常方便,而且提供了多線程安全的數(shù)據(jù)庫操作,相比coredata來說更加靈活和輕量級。

? ? ? ? fmdb主要有三個類別:

? ? ? ? fmdatabase:用來執(zhí)行sql語句;

? ? ? ?fmresultset:用來使用fmdatabase執(zhí)行查詢后的結(jié)果集合

? ? ? ?fmdatabasequeue:用來在多線程中查詢和更新數(shù)據(jù),它是線程安全的。

? ? ? ?需要注意的是,在iOS環(huán)境下,只有document directory 是可以進(jìn)行讀寫的。

fmdb的使用

1.在新建的項(xiàng)目中,導(dǎo)入libsqlite3的動態(tài)數(shù)據(jù)庫:

注:(在Building Phases中的Link Binary WithLibraries中添加)

2.加入第三方框架fmdb中的這些主要文件:

  

3.在代碼中建立一個數(shù)據(jù)庫,并指定文件路徑:

1 //指定沙盒路徑 2 NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; 3 //在指定沙盒路徑下添加sqlite文件 4 NSString *filepath = [path stringByAppendingPathComponent:@"moxue.sqlite"]; 5 //在指定path路徑下創(chuàng)建數(shù)據(jù)庫 6 FMDatabase *db = [FMDatabase databaseWithPath:filepath]; 7 //查看是否打開成功 8 if (![db open]) { 9 return; 10 }else{ 11 NSLog(@"打開成功"); 12 }

4.在代碼中添加列表和列表屬性:(表格的參數(shù)不能是id(大小寫都不可以),否則會出現(xiàn)創(chuàng)建表格失敗,因?yàn)楸砀裨趧?chuàng)建時,表格會自動生成一個id屬性)

1 //在數(shù)據(jù)庫中創(chuàng)建一個列表,并添加列表屬性 2 BOOL result = [db executeUpdate:@"CREATE TABLE IF NOT EXISTS data(id INTEGER PRIMARY KEY AUTOINCREMENT,Title TEXT,date TEXT,Context TEXT,Url TEXT)"]; 3 if (result) { 4 NSLog(@"創(chuàng)建data表成功"); 5 }else{ 6 NSLog(@"創(chuàng)建data表失敗"); 7 }

注意:(表名不能是變量),否則會創(chuàng)建表格失敗或?yàn)榭?#xff0c;正確的寫法為:

NSString *sql = [NSString stringWithFormat:@"select * from %@", tableName]; FMResultSet *rs = [db executeQuery:sql];

?

5.在列表中插入數(shù)據(jù):

1 //插入數(shù)據(jù) 2 BOOL res = [db executeUpdate:@"INSERT INTO data (Title,date,Context,Url) VALUES(?,?,?,?)",@"墨雪",@"2015-10-11",@"我的表格",@"我的Url"]; 3 BOOL res1 = [db executeUpdate:@"INSERT INTO data (Title,date,Context,Url) VALUES(?,?,?,?)",@"劉慶",@"2015-10-10",@"劉慶的表格",@"劉慶的Url"]; 4 if (res1) { 5 NSLog(@"插入data成功"); 6 }else{ 7 NSLog(@"插入data表失敗"); 8 }

6.在類表中刪除數(shù)據(jù)或者列表:

1 BOOL dele = [db executeUpdate:@"DROP TABLE IF EXISTS data"]; 2 BOOL dele1 = [db executeUpdate:@"delete from data where Title = '墨雪'"]; 3 if (dele) { 4 NSLog(@"刪除數(shù)據(jù)成功"); 5 }else{ 6 NSLog(@"刪除數(shù)據(jù)失敗"); 7 }

7.在列表中修改數(shù)據(jù):

1 //修改數(shù)據(jù) 2 BOOL UPDATE = [db executeUpdate:@"update data SET Title = '哈哈' WHERE id = 1" ]; 3 if (UPDATE) { 4 NSLog(@"修改成功"); 5 }else{ 6 NSLog(@"修改失敗"); 7 }

8.在列表中查詢數(shù)據(jù):

1 //查詢數(shù)據(jù) 2 FMResultSet *RS = [db executeQuery:@"SELECT Title from data"]; 3 while ([RS next]) { 4 NSString *name = [RS stringForColumn:@"Title"]; 5 NSLog(@"%@",name); 6 }

?9.?如果應(yīng)用中使用了多線程操作數(shù)據(jù)庫,那么就需要使用FMDatabaseQueue來保證線程安全了。 應(yīng)用中不可在多個線程中共同使用一個FMDatabase對象操作數(shù)據(jù)庫,這樣會引起數(shù)據(jù)庫數(shù)據(jù)混亂。 為了多線程操作數(shù)據(jù)庫安全,FMDB使用了FMDatabaseQueue,使用FMDatabaseQueue很簡單,首先用一個數(shù)據(jù)庫文件地址來初使化FMDatabaseQueue,然后就可以將一個閉包(block)傳入inDatabase方法中。 在閉包中操作數(shù)據(jù)庫,而不直接參與FMDatabase的管理。

1 FMDatabaseQueue *queue = [FMDatabaseQueue databaseQueueWithPath:filepath]; 2 dispatch_queue_t myq1 = dispatch_queue_create("myqueue1", nil); 3 dispatch_async(myq1, ^{ 4 [queue inDatabase:^(FMDatabase *db) { 5 FMResultSet *RS = [db executeQuery:@"SELECT Title from data"];
//NSString *address = [db stringForQuery:@"SELECT Address FROM PersonList WHERE Name = ?",@"John”];
6 while ([RS next]) { 7 NSString *name = [RS stringForColumn:@"Title"]; 8 NSLog(@"%@",name); 9 } 10 11 }]; 12 });

10.關(guān)閉數(shù)據(jù)庫

?1 [db close]; ?

11.另外?FMResultSet 還提供了很多方法來獲得所需的格式的值:

intForColumn: longForColumn: longLongIntForColumn: boolForColumn: doubleForColumn: stringForColumn: dataForColumn: dataNoCopyForColumn: UTF8StringForColumnIndex: objectForColumn: 12.fmda在存儲的過程中,傳給execute方法的參數(shù)必須是NSObject,如果是int,float等需要先將數(shù)據(jù)進(jìn)行包裝,否則傳過去的數(shù)據(jù)要么為null要么導(dǎo)致程序crash。正確的寫法應(yīng)該是:
FMResultSet *rs = [db executeQuery:sql, [NSNumber numberWithLong:mynum];

?

轉(zhuǎn)載于:https://www.cnblogs.com/moxuexiaotong/p/4870438.html

總結(jié)

以上是生活随笔為你收集整理的sqlite第三方类库FMDB的使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美精品欧美精品系列 | 韩国美女视频在线观看18 | 久久久久久久久久久久久久久久久久 | 三大队在线观看 | 伊人宗合 | 成人hd| 强制高潮抽搐哭叫求饶h | 久久成人综合 | 日韩精品免费一区二区在线观看 | 日本少妇吞精囗交 | 国产精品伦一区二区 | 色不卡| 91久久爱 | 不卡av影院 | 女人毛片视频 | 欧美日韩精选 | 美女毛片视频 | 美女在线观看www | 精品国产视频一区二区 | 拔插拔插海外华人永久免费 | 俺也去av| 九九精品免费视频 | 国产女同在线观看 | 妖精视频污 | 天天看夜夜 | 中文字幕 欧美激情 | 一节黄色片 | 激情国产 | 丁香五香天堂 | 欧美极品jizzhd欧美爆 | 最新视频 - x88av| 国产av无码专区亚洲a∨毛片 | 国产福利在线导航 | 天天鲁一鲁摸一摸爽一爽 | 国产性一乱一性一伧一色 | 毛片网在线 | 浪浪视频污 | 一级片视频在线观看 | 亚洲第一色区 | 国产精品视频专区 | 欧美日韩国产综合在线 | 无码任你躁久久久久久老妇 | 日韩乱码在线 | 国产黄色电影 | 奇米视频在线观看 | 中文天堂av | 99久久精品国产一区二区三区 | 亚洲色图综合 | 亚洲精品国产精品乱码 | 黄网站在线免费 | 亚洲在线观看一区 | 国产香蕉精品视频 | 久久久一区二区 | 日韩精品免费一区二区 | 一道本在线播放 | 色噜噜一区二区三区 | 农村末发育av片一区二区 | 日韩porn| 神秘马戏团在线观看免费高清中文 | 天天操天天舔 | 91麻豆产精品久久久久久夏晴子 | 国产永久精品大片wwwapp | 夜色视频网 | 少妇淫片 | 99热精品在线播放 | 色先锋在线 | 成人免费看av | 女女互磨互喷水高潮les呻吟 | 天天操夜夜摸 | 中文字幕乱码无码人妻系列蜜桃 | 男女猛烈无遮挡免费视频 | a中文字幕 | 亚洲成人v | 国产精品一区二区三区线羞羞网站 | 日本视频www色 | 欧美精品三级 | 亚洲午夜精品视频 | 精品人人人人 | 亚洲乱码国产乱码精品精的特点 | 日韩中文字幕视频 | 午夜一级免费 | 99re在线国产 | 亚洲黄色一区 | 在线观看91| 精品久久视频 | 91二区 | 无码精品一区二区免费 | 亚洲中文字幕无码一区二区三区 | 青青国产在线视频 | 午夜免费影院 | 干b视频在线观看 | 精品一区李梓熙捆绑 | 国产美女主播视频 | 亚洲第一天堂久久 | 奇米777色| 欧美性爱精品一区 | 欧美特级黄色 | 欧美日韩中文字幕在线观看 | 精品乱人伦一区二区三区 |