亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

IOS數據存儲之FMDB詳解

2019-11-14 18:45:01
字體:
來源:轉載
供稿:網友

  FMDB是用于進行數據存儲的第三方的框架,它與SQLite與Core Data相比較,存在很多優勢。

  FMDB是面向對象的,它以OC的方式封裝了SQLite的C語言API,使用起來更加的方便,不需要過多的關心數據庫操作的知識。但是它本身也存在一些問題,比如跨平臺,因為它是用oc的語言封裝的,所以只能在ios開發的時候使用,如果想實現跨平臺的操作,來降低開發的成本和維護的成本,就需要使用比較原始的SQLite。

  Core Data是ORM的一種體現,使用Core Data需要用到模型數據的轉化,雖然操作簡單,不需要直接操作數據庫,但是性能沒有直接使用SQLite高。但是SQLite使用的時候需要使用c語言中的函數,操作比較麻煩,因此需要對它進行封裝。但是如果只是簡單地封裝,很可能會忽略很多重要的細節,比如如何處理并發以及安全性更問題。

  因此,在這里推薦使用第三方框架FMDB,它是對libsqlite3框架的封裝,用起來的步驟與SQLite使用類似,并且它對于多線程的同時操作一個表格時進行了處理,也就意味著它是線程安全的。FMDB是輕量級的框架,使用靈活,它是很多企業開發的首選。

 FMDB中重要的類

FMDatabase:一個FMDatabase對象就代表一個單獨的SQLite數據庫,用來執行SQL語句 

FMResultSet:使用FMDatabase執行查詢后的結果集

FMDatabaseQueue:用于在多線程中執行多個查詢或更新,它是線程安全的

 FMDB使用步驟

  1. 下載FMDB文件 fmdb下載地址  ,將FMDB文件夾添加到項目中

  2. 導入sqlite框架,導入FMDatabase.h文件

 

  3.與SQLite使用步驟類似,需要獲取數據庫文件路徑,然后獲得數據庫,并打開數據庫,然后數據庫進行操作,最后關閉數據庫。代碼如下所示:

//  ViewController.m//  JRFMDB////  Created by jerehedu on 15/6/18.//  Copyright (c) 2015年 jerehedu. All rights reserved.//#import "ViewController.h"#import "FMDatabase.h"@interface ViewController ()@PRoperty (nonatomic, strong) FMDatabase *db;@end@implementation ViewController- (void)viewDidLoad{    [super viewDidLoad];    //導入sqlite框架,導入FMDB文件夾        //1.獲得數據庫文件的路徑    NSString *doc=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];    NSString *fileName=[doc stringByAppendingPathComponent:@"student.sqlite"];    NSLog(@"fileName = %@",fileName);        //2.獲得數據庫    FMDatabase *db = [FMDatabase databaseWithPath:fileName];        //3.打開數據庫    if ([db open]) {        NSLog(@"ok");                //4.創表        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(@"創表成功");        }else{            NSLog(@"創表失敗");        }    }    self.db=db;        //插入數據    [self insertStu];    [self deleteStu:6];    [self updateStu:@"apple7_name" :@"7777"];        [self queryStu];    [self dropStu];    [self insertStu];    [self queryStu];        //6.關閉數據庫    [self.db close];}#pragma mark 插入數據-(void)insertStu{    for (int i=0; i<10; i++)    {        NSString *name = [NSString stringWithFormat:@"1apple%i_name",i];        int age = arc4random()%3+20;                //1.  executeUpdate : 不確定的參數用?來占位 (后面參數必須都是oc對象)        [self.db executeUpdate:@"INSERT INTO t_student (name, age) VALUES (?,?);",name,@(age)];                //2.  executeUpdateWithFormat : 不確定的參數用%@、%d等來占位 (參數為原始數據類型)        //        [self.db executeUpdateWithFormat:@"insert into t_student (name, age) values (%@, %i);",name,age];                //3. 數組        //        [self.db executeUpdate:@"INSERT INTO t_student (name, age) VALUES (?,?);" withArgumentsInArray:@[name,@(age)]];    }    }#pragma mark 刪除數據-(void)deleteStu:(int)idNum{    //a.  executeUpdate : 不確定的參數用?來占位 (后面參數必須都是oc對象)    //    [self.db executeUpdate:@"delete from t_student where id=?;",@(idNum)];        //b.  executeUpdateWithFormat : 不確定的參數用%@、%d等來占位    //    [self.db executeUpdateWithFormat:@"delete from t_student where name=%@;",@"apple9_name"];}#pragma mark 銷毀表格-(void)dropStu{    [self.db executeUpdate:@"drop table if exists t_student;"];        //4.創表    BOOL result=[self.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(@"再次創表成功");    }else{        NSLog(@"再次創表失敗");    }}#pragma mark 修改數據-(void)updateStu:(NSString *)oldName :(NSString*)newName{    //    [self.db executeUpdateWithFormat:@"update t_student set name=%@ where name=%@;",newName,oldName];    [self.db executeUpdate:@"update t_student set name=? where name=?",newName,oldName];}#pragma mark 查詢數據-(void)queryStu{    //1.執行查詢語句    //    FMResultSet *resultSet = [self.db executeQuery:@"select * from t_student;"];    FMResultSet *resultSet = [self.db executeQuery:@"select * from t_student where id<?;",@(14)];        //2.遍歷結果集合    while ([resultSet next]) {        int idNum = [resultSet intForColumn:@"id"];        NSString *name = [resultSet objectForColumnName:@"name"];        int age = [resultSet intForColumn:@"age"];        NSLog(@"id=%i ,name=%@, age=%i",idNum,name,age);    }    }- (void)didReceiveMemoryWarning{    [super didReceiveMemoryWarning];    // Dispose of any resources that can be recreated.}@end

 

  疑問咨詢或技術交流,請加入官方QQ群:JRedu技術交流 (452379712)

 

作者:杰瑞教育
出處:http://www.49028c.com/jerehedu/ 
本文版權歸煙臺杰瑞教育科技有限公司和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。
 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲国产精品久久久久秋霞蜜臀| 国产精品成人一区二区| 午夜精品久久久久久久99热浪潮| 午夜欧美大片免费观看| 国产美女精品视频| 国产亚洲精品一区二555| 国产精品久久电影观看| 国产成人精品久久亚洲高清不卡| 精品色蜜蜜精品视频在线观看| 亚洲一区二区三区乱码aⅴ蜜桃女| 亚洲加勒比久久88色综合| 国产一区二区三区视频免费| 少妇久久久久久| 91精品国产高清自在线| 国产亚洲精品美女久久久| 97在线日本国产| 欧美尺度大的性做爰视频| 国产精品尤物福利片在线观看| xxxxxxxxx欧美| 青青草99啪国产免费| 欧美第一黄色网| 国内精品久久久| 97精品视频在线播放| 欧美第一淫aaasss性| 欧美日韩激情网| 国内精品久久久久久影视8| 最近2019免费中文字幕视频三| 国产精品黄视频| 国产日韩欧美一二三区| 精品爽片免费看久久| 日韩中文在线不卡| 久久精品国产2020观看福利| 九九久久综合网站| 国产欧美在线看| 日韩一区二区三区xxxx| 亚洲尤物视频网| 最近2019中文免费高清视频观看www99| 91久久久久久| 国产免费一区二区三区在线能观看| 国产热re99久久6国产精品| 欧美性色xo影院| 亚洲一级片在线看| 美女扒开尿口让男人操亚洲视频网站| 成人免费网站在线观看| 日韩精品在线看| 97精品欧美一区二区三区| 亚洲国产一区二区三区四区| 欧美性jizz18性欧美| 日韩av在线免费观看一区| 亚洲女同性videos| 中文字幕最新精品| 欧美精品一区二区免费| 欧美在线观看www| 日韩精品在线观看视频| 精品久久久av| 久久久欧美精品| 日韩hd视频在线观看| 欧美裸身视频免费观看| 日韩精品在线免费观看| 中文字幕亚洲色图| 久久视频在线免费观看| 亚洲日本中文字幕| 国产精品av在线播放| 97久久精品人人澡人人爽缅北| 久久精品福利视频| 国产精品激情av在线播放| 成人免费高清完整版在线观看| 欧美中在线观看| 精品一区电影国产| 日韩中文字幕精品| 国产精品一区=区| 另类天堂视频在线观看| 国产福利视频一区| 国产成人精品免费久久久久| 色综合视频网站| 性欧美在线看片a免费观看| 国产精品国产自产拍高清av水多| 欧美疯狂做受xxxx高潮| 亚洲国产99精品国自产| 免费成人高清视频| xvideos亚洲| 97久久国产精品| 亚洲男人天堂九九视频| 亚洲电影中文字幕| 亚洲欧美日韩精品久久奇米色影视| 国产精品爽黄69| 国产精品亚洲欧美导航| 欧美久久久精品| 亚洲最大成人在线| 国产精品黄页免费高清在线观看| 亚洲精品99久久久久中文字幕| 国产精品视频26uuu| 91中文字幕在线观看| 日韩精品在线影院| 欧美一级电影久久| 国产69精品久久久久久| 亚洲片国产一区一级在线观看| 久久久久久久久网站| 91在线高清视频| 国产69久久精品成人看| 国产成人综合亚洲| 国产午夜精品美女视频明星a级| 国内偷自视频区视频综合| 91国产中文字幕| 国产亚洲成av人片在线观看桃| 福利视频一区二区| 日韩成人av在线| 国产一区二区三区高清在线观看| 亚洲网站在线播放| 欧美激情一区二区三区久久久| 国产原创欧美精品| 51精品国产黑色丝袜高跟鞋| 欧美国产一区二区三区| 国产在线日韩在线| 欧美肥老妇视频| 国产ts人妖一区二区三区| 国产精品老女人视频| 久久久久久香蕉网| 亚洲人成网站在线播| 中文字幕亚洲一区二区三区| 国产亚洲视频在线| 国产精品入口夜色视频大尺度| 欧美亚洲在线视频| 136fldh精品导航福利| 不卡av电影院| www.日韩av.com| 精品欧美国产一区二区三区| 欧美日韩电影在线观看| 欧美黑人极品猛少妇色xxxxx| 韩国精品美女www爽爽爽视频| 日韩经典一区二区三区| 狠狠色狠狠色综合日日小说| 丝袜亚洲欧美日韩综合| 精品国产成人av| 热99精品只有里视频精品| 亚洲一区中文字幕| 国产丝袜一区二区三区| 欧美性xxxxxxxxx| 欧美综合第一页| 国产成人在线亚洲欧美| 精品亚洲va在线va天堂资源站| 亚洲自拍偷拍在线| 国产成人精品网站| 国产精品第100页| 国产91色在线|| 国产精品高清在线观看| 日韩av最新在线| 97人人爽人人喊人人模波多| 91国产精品视频在线| 亚洲国产精彩中文乱码av在线播放| 精品国产一区二区三区四区在线观看| 国产精品久久久久久久久久久久久久| 亚洲天堂av女优| 欧美第一淫aaasss性| 91精品久久久久久久久| 丝袜亚洲欧美日韩综合| 欧美电影在线观看| 国产精品久久久久久久久借妻| 91在线视频精品| 免费成人高清视频| 伊人久久久久久久久久久| 亚洲欧美精品伊人久久| 26uuu日韩精品一区二区| 欧美性xxxxxxx|