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

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

IOS開發之數據庫FMDB

2019-11-14 19:13:59
字體:
來源:轉載
供稿:網友

IOS開發之數據庫FMDB

1.簡介

  需求作用:    

    如果需要保存大量的結構較為復雜的數據時候, 使用數據庫, 例如交規考試項目

  常用的數據庫:

    (1)Microsoft SQL Server 2000/2008, 中小企業使用較多

    (2)Oracle 比較復雜, 大企業使用較多

    (3)MySQL數據庫, 網站使用較多

    (4)sqlite:   本地數據庫, 訪問數據足夠快, 直接訪問文件

           足夠簡單, 功能相對其他數據庫軟件不是特別齊全, 足夠用了

             足夠小, 系統不超過1M, 適合在移動端上使用

2. MesaSQlite使用

實例:  使用數據存儲存儲一個班上學生的信息

      學號sid  用戶名username  密碼passWord 成績score

      1501    zhangsan      123      100

      1502    lilei         321      90

      1503    wangwu        222      80 

(1)創建數據庫 

  打開MesaSQlite后如果選擇Cancel,這就是需要你手動創建一個屬于你的數據庫,

  選擇File-->New Database ,彈出對話框Save 填寫保存的文件名和位置,

(2)創建數據表

(3)設計數據表(添加多個字段/列)

(4)數據庫常用操作

  增,刪,改,查

 

3.SQL結構化查詢語句

SQL Structure Query Language, 結構化查詢語言, 作用就是操作數據庫(創建表, 數據增刪改查)

1)創建數據表

create table if not exists StudentInfo(sid integer, username varchar(20), password varchar(20),score varchar(20))

(2)插入數據

insert into StudentInfo(sid,username,password,score) values(1503,'wangwu','222','80')

(3)查詢數據

  <1>查詢表格中的所有數據

select * from StudentInfo;

  <2>查詢指定的字段

    例:查詢所有名字username

select username from StudentInfo

  <3>根據指定的條件進行查詢

    例:查找username為zhangsan的所有信息

select * from StudentInfo where username='zhangsan'

  <4>根據多個條件進行查詢

    例:查找username為zhangsan,并且password為123的所有信息

select * from StudentInfo where username='zhangsan' and password='123'

  <5>查詢后按需要排序

    例:根據age升序排序

      降序排列

select * from StudentInfo order by score 

      升序排列

select * from StudentInfo order by score desc

 

  <6>獲取,查詢數據的行數或個數

select count(*) from StudentInfo 

 

(4)修改數據

update StudentInfo set score='100'  where username='zhangsan';

(5)刪除數據

delete from StudentInfo where sid='1503'

 

4. FMDB操作數據庫

(1)配置 (進行簡單的配置即可使用)

  導入文件,

  添加二進制庫 libsqlite3.dylib,

  包含頭文件#import "FMDatabase.h"

    注意:說明一下iOS的安全機制————沙盒機制

//沙盒機制-(void)SandBox{    //IOS安全機制 - 沙盒    //(1)每個應用內容度放在一個沙盒目錄下面    //(2)每個應用只能修改自己沙盒目錄下得文件,其他應用文件無法修改    //(3)默認文件Documents,Library,tmp    //開發:自己創建的文件放在Documents下面        //確定文件位置    //當前應用文件夾 :NSHomeDirectory()    NSLog(@"%@",[[NSFileManager defaultManager] contentsOfDirectoryAtPath:NSHomeDirectory() error:nil]);    NSLog(@"home == %@",NSHomeDirectory());}

 

(2)使用

  實例:存儲學生的信息

    a.創建數據庫

-(void)creatAndInitFMDBDatabase{    //設置路徑    NSString *path = [NSString stringWithFormat:@"%@/Documents/stuInfo.sqlite",NSHomeDirectory()];        //創建數據庫(如果不存在則創建打開,如果存在則直接打開)    _database = [[FMDatabase alloc]initWithPath:path];    if (!_database.open) {        NSLog(@"失敗");        return;    }    NSLog(@"成功");}

    

    b.創建數據表

-(void)createTable{    //executeQuery用來執行select語句    //其他語句使用executeUpdate    //    _database executeQuery:<#(NSString *), ...#>    NSString *sql = @"create table if not exists StudentInfo(sid integer,username varchar(20),password varchar(20),score varchar(20))";    BOOL b = [_database executeUpdate:sql];    NSLog(@"creatTable = %d",b);}

 

    c.插入數據

-(void)insertData{    int sid = 1501;    NSString *username = @"zhangsan";    NSString *password = @"123";    NSString *score = @"100";    NSString *sql = @"insert into StudentInfo(sid,username,password,score) values(?,?,?,?)";        BOOL b = [_database executeUpdate:sql,[NSString stringWithFormat:@"%d",sid],username,password,score];    NSLog(@"insertData = %d",b);}

 

         d.查詢數據

-(void)queryData{    NSString *sql = @"select * from StudentInfo";    FMResultSet *resultSet = [_database executeQuery:sql];    while ([resultSet next]) {        NSLog(@"sid = %@, username = %@, password = %@, score = %@",[resultSet stringForColumn:@"sid"],[resultSet stringForColumn:@"username"],[resultSet stringForColumn:@"password"],[resultSet stringForColumn:@"score"]);    }}

 

         e.修改和刪除

      //參照數據的插入和查詢

  

5. 數據庫在項目中使用-單例設計模式(交通規則考試為例)

(1)配置 (進行簡單的配置即可使用)

  導入文件,

  添加二進制庫 libsqlite3.dylib,

  包含頭文件#import "FMDatabase.h"

 

(2)使用

  a.創建一個DatabaseManager的單例(繼承NSObject),里面添加兩個方法并實現

//獲取單例對象+(id)sharedInstance;//獲取第一級目錄-(NSArray *)firstLevels;

  

#import "DatabaseManager.h"#import "FMDatabase.h"@interface DatabaseManager (){    FMDatabase *_database;}@end@implementation DatabaseManager//獲取單例對象+(id)sharedInstance{    static DatabaseManager *dc = nil;    if (dc == nil) {        dc = [[[self class]alloc]init];    }    return dc;}//重寫初始化的方法-(id)init{    if (self = [super init]) {        [self openDatabase];    }    return self;}//打開數據庫-(void)openDatabase{    NSString *path = [[NSBundle mainBundle]pathForResource:@"data.sqlite" ofType:nil];    _database = [[FMDatabase alloc]initWithPath:path];    if (!_database.open) {        NSLog(@"打開失敗");    }}//獲取第一級目錄-(NSArray *)firstLevels{    NSString *sql = @"select *from firstlevel";    FMResultSet *resultSet = [_database executeQuery:sql];    NSMutableArray *marr = [[NSMutableArray alloc]init];    while ([resultSet next]) {                FirstLevelModel *model = [[FirstLevelModel alloc]init];        model.pid = [resultSet stringForColumn:@"pid"];        model.pname = [resultSet stringForColumn:@"pname"];        model.pcount = [resultSet stringForColumn:@"pcount"];                [marr addObject:model];    }    return marr;}

 

  b.實現  

  c.創建模型model(FirstLevelModel,繼承NSObject)

#import <Foundation/Foundation.h>@interface FirstLevelModel : NSObject@PRoperty (copy,nonatomic) NSString *pid;@property (copy,nonatomic) NSString *pname;@property (copy,nonatomic) NSString *pcount;@end

 

 

    導入單例DatabaseManager的頭文件

#import "ViewController.h"#import "DatabaseManager.h"@interface ViewController ()<UITableViewDataSource,UITableViewDelegate>{    UITableView *_tableView ;    NSMutableArray *_dataArray;    }@end@implementation ViewController- (void)viewDidLoad{    [super viewDidLoad];    // Do any additional setup after loading the view, typically from a nib.        //初始化_dataArray    _dataArray = [[NSMutableArray alloc]init];        //獲取單例    DatabaseManager *manager = [DatabaseManager sharedInstance];        //通過遍歷單例創建Model    for (FirstLevelModel *model  in manager.firstLevels) {        NSLog(@"name = %@",model.pname);        //把遍歷后的數據加入到_dataArray中        [_dataArray addObject:model];    }    NSLog(@"%d",manager.firstLevels.count);    [self creatTableView];    }//創建tableView-(void)creatTableView{    _tableView = [[UITableView alloc]initWithFrame:self.view.bounds style:UITableViewStylePlain];    _tableView.delegate = self;    _tableView.dataSource = self;    //返回cell的高度    _tableView.rowHeight = 50;    [self.view addSubview:_tableView ];        //給_dataArray的數據賦值    _dataArray = [[NSMutableArray alloc]initWithArray: [[DatabaseManager sharedInstance] firstLevels]];    }-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{    NSLog(@"%d",[[[DatabaseManager sharedInstance] firstLevels] count]);    return [[[DatabaseManager sharedInstance] firstLevels] count];}-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{    static NSString *inde = @"cellId";    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:inde];    if (cell == nil) {        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:inde];            }        //創建model獲取數據并給cell賦值    FirstLevelModel *model = _dataArray[indexPath.row];    cell.textLabel.text = model.pname;    return cell;}//是否可以編輯-(BOOL) tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath{    return YES;} 

 

 代碼下載


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
中文字幕无线精品亚洲乱码一区| 亚洲第一福利在线观看| 日韩一级黄色av| 国产mv免费观看入口亚洲| 成人性教育视频在线观看| 在线不卡国产精品| 久久视频在线视频| 欧美日韩一区二区免费视频| 两个人的视频www国产精品| 国产精品一二三在线| 久久久精品在线观看| 亚洲国产精品电影| 欧美一乱一性一交一视频| 色噜噜国产精品视频一区二区| 亚洲综合国产精品| 欧美极品少妇xxxxⅹ喷水| 亚洲欧美第一页| 欧美日韩免费观看中文| 国产成人a亚洲精品| 国产午夜精品理论片a级探花| 最近2019中文字幕mv免费看| 欧美一区深夜视频| 欧美激情在线狂野欧美精品| 亚洲欧美精品suv| 8050国产精品久久久久久| 国产精品国语对白| 亚洲第一色中文字幕| 国产91精品青草社区| 一本一道久久a久久精品逆3p| 久久久精品免费视频| 日韩av影视在线| 亚洲国产精品成人精品| 国产主播喷水一区二区| 伊人激情综合网| 91av在线播放视频| 国产精品久久久久久久久久免费| 欧美乱大交xxxxx另类电影| 色偷偷888欧美精品久久久| 亚洲人在线观看| 欧美性少妇18aaaa视频| 草民午夜欧美限制a级福利片| 国产亚洲精品一区二555| 中文字幕亚洲天堂| 亚洲2020天天堂在线观看| 久久精品国产欧美激情| 精品国产1区2区| 日韩免费av在线| 欧美一区亚洲一区| 久久中文精品视频| 成人午夜在线观看| zzjj国产精品一区二区| 在线免费观看羞羞视频一区二区| 国产精品a久久久久久| 久久av红桃一区二区小说| 欧美午夜精品久久久久久久| 欧美日韩亚洲视频一区| 欧洲成人免费视频| 7m第一福利500精品视频| 岛国av一区二区三区| 日韩精品欧美激情| 97精品一区二区三区| 欧美另类第一页| 亚洲精品成人av| 欧美电影电视剧在线观看| 亚洲国产精品yw在线观看| 欧美日韩亚洲视频| 91牛牛免费视频| 国产精品男女猛烈高潮激情| 欧美性20hd另类| 久久久精品视频在线观看| 亚洲另类图片色| 欧美区二区三区| 国产在线日韩在线| 日韩美女av在线| 国产国产精品人在线视| 国产亚洲精品一区二555| 国产精品久久久久久久美男| 亚洲综合中文字幕68页| 成人免费淫片aa视频免费| 91香蕉嫩草影院入口| 97国产suv精品一区二区62| 欧美三级免费观看| 欧美激情精品久久久久久| 国产91露脸中文字幕在线| 欧美日韩国产页| 亚洲欧洲国产一区| 国产精品99久久久久久白浆小说| 狠狠综合久久av一区二区小说| 成人激情春色网| 欧美成人激情视频免费观看| 久久人91精品久久久久久不卡| 亚洲成av人片在线观看香蕉| 亚洲a级在线播放观看| 欧美另类在线播放| 亚洲精品国精品久久99热一| 精品久久中文字幕久久av| 亚洲一区二区三区sesese| 91精品国产综合久久香蕉最新版| 国产精品自拍小视频| 亚洲国产欧美一区二区三区同亚洲| 国产成人精品在线视频| 国内精品久久久久久中文字幕| 深夜成人在线观看| 性色av一区二区三区红粉影视| 日韩在线观看免费网站| 国产精品女主播视频| 欧美精品激情视频| 九九久久国产精品| 美女久久久久久久久久久| 欧美高清视频在线观看| 国产精品午夜一区二区欲梦| 538国产精品视频一区二区| 亚洲香蕉伊综合在人在线视看| 欧美自拍视频在线观看| 成人中文字幕+乱码+中文字幕| 欧美激情综合色综合啪啪五月| 亚洲人成欧美中文字幕| 国产精品a久久久久久| 亚洲精品视频久久| 日韩福利伦理影院免费| 欧美日韩国产中文精品字幕自在自线| 一区二区三区视频免费| 亚洲美女又黄又爽在线观看| 精品国产一区二区三区四区在线观看| 尤物九九久久国产精品的分类| 一区二区三区黄色| 欧美自拍视频在线观看| 国产精品欧美久久久| 欧美肥老太性生活视频| 欧美成人免费一级人片100| 91精品视频专区| 爽爽爽爽爽爽爽成人免费观看| 亚洲毛片在线观看.| 亚洲高清免费观看高清完整版| 欧美激情久久久久久| 成人黄色大片在线免费观看| 久久精品亚洲一区| 日韩美女激情视频| 高潮白浆女日韩av免费看| 久久免费国产精品1| 成人女保姆的销魂服务| 亚洲a级在线播放观看| 亚洲第一综合天堂另类专| 精品久久久久久久中文字幕| 欧美日韩中文字幕在线视频| 最近2019中文免费高清视频观看www99| 国产欧洲精品视频| 亚洲美女av电影| 久久亚洲春色中文字幕| 91精品国产九九九久久久亚洲| 菠萝蜜影院一区二区免费| 成人免费福利视频| 国产丝袜一区视频在线观看| 久久久久久久网站| 97在线视频精品| 91精品国产91久久久久| 国产欧美日韩免费看aⅴ视频| 久久精品欧美视频| 国产一区二区三区中文| 国产精品国内视频| 一本一道久久a久久精品逆3p| 亚洲人成网站999久久久综合| 欧美一级在线亚洲天堂| 国产精品pans私拍|