學(xué)習(xí)筆記---FMDB數(shù)據(jù)庫(kù)的封裝

pragma mark ----定義----

  1. FMDBManager.h

把數(shù)據(jù)庫(kù)寫(xiě)成一個(gè)單例

#pragma mark ----單例----
+(FMDBManager *)shareInstance;

第一次運(yùn)行程序勘畔,會(huì)創(chuàng)建數(shù)據(jù)庫(kù) 并且鏈接數(shù)據(jù)庫(kù)地址
非第一次運(yùn)行程序 不會(huì)再創(chuàng)建數(shù)據(jù)庫(kù) 直接鏈接數(shù)據(jù)庫(kù)地址

#pragma mark ---打開(kāi)數(shù)據(jù)庫(kù)---
-(void)openDB;

在數(shù)據(jù)庫(kù)中創(chuàng)建表

#pragma mark ---在數(shù)據(jù)庫(kù)中創(chuàng)建表---
-(void)createTableWithTableName:(NSString *)tableName;

在數(shù)據(jù)庫(kù)中插入數(shù)據(jù)

#pragma mark ---添加數(shù)據(jù)---
-(void)insertDataWithTableName:(NSString *)tableName name:(NSString *)name gender:(NSString *)gender age:(NSInteger)age image:(UIImage *)image myID:(NSInteger)myID;

在特定表名中刪除數(shù)據(jù)

#pragma mark ---刪除數(shù)據(jù)---
-(void)deleteDataWithTableName:(NSString *)tableName  myID:(NSInteger)myID;

在特定表名中修改數(shù)據(jù)

#pragma mark ---修改數(shù)據(jù)---
-(void)updataDataWithTableName:(NSString *)tableName name:(NSString *)name gender:(NSString *)gender age:(NSInteger)age image:(UIImage *)image myID:(NSInteger)myID forMyID:(NSInteger)forMyID;

查詢一條數(shù)據(jù)

#pragma mark ---查詢數(shù)據(jù)---
-(Model *)selectOneDataWithTableName:(NSString *)tableName myID:(NSInteger)myID;

查詢所有數(shù)據(jù)

#pragma mark ---查詢所有數(shù)據(jù)---
-(NSMutableArray *)selectAllDataWithTableName:(NSString *)tableName;

pragma mark ----實(shí)現(xiàn)----

2.FMDBManager.m

定義一個(gè)全局靜態(tài)變量

static FMDatabase *db = nil;
#pragma mark ----單例----
+(FMDBManager *)shareInstance
{
    static FMDBManager *manager = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        manager = [[FMDBManager alloc]init];
    });
    return manager;
}

創(chuàng)建數(shù)據(jù)庫(kù),返回?cái)?shù)據(jù)庫(kù)路徑

-(NSString *)createSqliteWithSqliteName:(NSString *)sqliteName
{
    return [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)firstObject]stringByAppendingPathComponent:sqliteName];
}

第一次運(yùn)行程序,會(huì)創(chuàng)建數(shù)據(jù)庫(kù) 并且鏈接數(shù)據(jù)庫(kù)地址
非第一次運(yùn)行程序 不會(huì)再創(chuàng)建數(shù)據(jù)庫(kù) 直接鏈接數(shù)據(jù)庫(kù)地址

#pragma mark ---打開(kāi)數(shù)據(jù)庫(kù)---
-(void)openDB
{
    if (db != nil) {
        return;
    }
    NSString *path = [self createSqliteWithSqliteName:@"lol.sqlite"];
    NSLog(@"path ===== %@",path);
    db = [FMDatabase databaseWithPath:path];
> 打印信息带迟,確認(rèn)是否成功打開(kāi)數(shù)據(jù)庫(kù)
    if ([db open]) {
        NSLog(@"數(shù)據(jù)庫(kù)打開(kāi)成功");
    }
    else {
        NSLog(@"數(shù)據(jù)庫(kù)打開(kāi)失敗");
    }    
}

為了查找錯(cuò)誤方便命锄,給一個(gè)flag值來(lái)觀察

#pragma mark ---在數(shù)據(jù)庫(kù)中創(chuàng)建表---
-(void)createTableWithTableName:(NSString *)tableName
{
    [db open];
    NSString *string = [NSString stringWithFormat:@"create table if not exists %@ (ID integer primary key autoincrement, name text, gender text, age integer, image blob, myID integer)",tableName];
    BOOL flag = [db executeUpdate:string];
    NSLog(@"創(chuàng)建表flag === %d",flag);
}

注意數(shù)據(jù)庫(kù)中數(shù)據(jù)的屬性,需要轉(zhuǎn)化成NSString或者NSNumber

>#pragma mark ---添加數(shù)據(jù)---
-(void)insertDataWithTableName:(NSString *)tableName name:(NSString *)name gender:(NSString *)gender age:(NSInteger)age image:(UIImage *)image myID:(NSInteger)myID
{
    [db open];
    NSString *string = [NSString stringWithFormat:@"insert into %@ (name, gender, age, image, myID) values (?, ?, ?, ?, ?)",tableName];
    NSString *ageString =  [NSString stringWithFormat:@"%ld",age];
    NSString *myIDString = [NSString stringWithFormat:@"%ld",myID];
    BOOL flag = [db executeUpdate:string,name,gender,ageString,UIImagePNGRepresentation(image),myIDString];
    NSLog(@"插入數(shù)據(jù)flag ==== %d",flag);    
}

注意數(shù)據(jù)庫(kù)中數(shù)據(jù)的屬性

#pragma mark ---在特定表名中刪除數(shù)據(jù)---
-(void)deleteDataWithTableName:(NSString *)tableName  myID:(NSInteger)myID
{
    [db open];
    NSString *string = [NSString stringWithFormat:@"delete from %@ where myID = ?",tableName];
    NSString *myIDString = [NSString stringWithFormat:@"%ld",myID];
    BOOL flag = [db executeUpdate:string,myIDString];
    NSLog(@"刪除數(shù)據(jù)flag === %d",flag);    
}
>#pragma mark ---在特定表名中修改數(shù)據(jù)---
-(void)updataDataWithTableName:(NSString *)tableName name:(NSString *)name gender:(NSString *)gender age:(NSInteger)age image:(UIImage *)image myID:(NSInteger)myID forMyID:(NSInteger)forMyID
{
    [db open];
    NSString *string = [NSString stringWithFormat:@"update %@ set name = ?, gender = ?, age = ?, image = ?, myID = ? where myID = ?",tableName];
    NSString *agestr = [NSString stringWithFormat:@"%ld",age];
    NSString *myIDString = [NSString stringWithFormat:@"%ld",myID];
    NSString *forMyIDString = [NSString stringWithFormat:@"%ld",forMyID];
    BOOL flag = [db executeUpdate:string,name,gender,agestr,UIImagePNGRepresentation(image),myIDString,forMyIDString];
    NSLog(@"更新數(shù)據(jù)flag ==== %d",flag);    
}

注意數(shù)據(jù)屬性的轉(zhuǎn)化

>#pragma mark ---查詢數(shù)據(jù)---
-(Model *)selectOneDataWithTableName:(NSString *)tableName myID:(NSInteger)myID
{
    Model *model = [[Model alloc]init];
    [db open];
    NSString *string = [NSString stringWithFormat:@"select * from %@ where myID = ?",tableName];
    NSString *myIDString = [NSString stringWithFormat:@"%ld",myID];
    FMResultSet *result = [db executeQuery:string,myIDString];
    while ([result next]) {
        model.name = [result stringForColumn:@"name"];
        model.gender = [result stringForColumn:@"gender"];
        model.age = [result intForColumn:@"age"];
        NSData *data = [result dataForColumn:@"image"];
        model.image = [UIImage imageWithData:data];
        model.myID = [result intForColumn:@"myID"];
    }
    return  model;
}

和上面類似万哪,就換了一下返回值

>#pragma mark ---查詢所有數(shù)據(jù)---
-(NSMutableArray *)selectAllDataWithTableName:(NSString *)tableName
{
    NSMutableArray *modelArr = [NSMutableArray array];
    [db open];
    NSString *string = [NSString stringWithFormat:@"select * from %@",tableName];
    FMResultSet *result = [db executeQuery:string];
    while ([result next]) {
        Model *model = [[Model alloc]init];
        model.name = [result stringForColumn:@"name"];
        model.gender = [result stringForColumn:@"gender"];
        model.age = [result intForColumn:@"age"];
        NSData *data = [result dataForColumn:@"image"];
        model.image = [UIImage imageWithData:data];
        model.myID = [result intForColumn:@"myID"];
        [modelArr addObject:model];        
    }
    return  modelArr;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末侠驯,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子奕巍,更是在濱河造成了極大的恐慌吟策,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件的止,死亡現(xiàn)場(chǎng)離奇詭異檩坚,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)诅福,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)匾委,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人氓润,你說(shuō)我怎么就攤上這事赂乐。” “怎么了旺芽?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵沪猴,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我采章,道長(zhǎng)运嗜,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任悯舟,我火速辦了婚禮担租,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘抵怎。我一直安慰自己奋救,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布反惕。 她就那樣靜靜地躺著尝艘,像睡著了一般。 火紅的嫁衣襯著肌膚如雪姿染。 梳的紋絲不亂的頭發(fā)上背亥,一...
    開(kāi)封第一講書(shū)人閱讀 51,125評(píng)論 1 297
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼狡汉。 笑死娄徊,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的盾戴。 我是一名探鬼主播寄锐,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼尖啡!你這毒婦竟也來(lái)了橄仆?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤衅斩,失蹤者是張志新(化名)和其女友劉穎沿癞,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體矛渴,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡椎扬,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了具温。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蚕涤。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖铣猩,靈堂內(nèi)的尸體忽然破棺而出揖铜,到底是詐尸還是另有隱情,我是刑警寧澤达皿,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布天吓,位于F島的核電站,受9級(jí)特大地震影響峦椰,放射性物質(zhì)發(fā)生泄漏龄寞。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一汤功、第九天 我趴在偏房一處隱蔽的房頂上張望物邑。 院中可真熱鬧,春花似錦滔金、人聲如沸色解。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)科阎。三九已至,卻和暖如春忿族,著一層夾襖步出監(jiān)牢的瞬間锣笨,已是汗流浹背刚梭。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留票唆,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓屹徘,卻偏偏與公主長(zhǎng)得像走趋,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子噪伊,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

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

  • 數(shù)據(jù)庫(kù)存在的意義就是對(duì)數(shù)據(jù)進(jìn)行整合和管理簿煌,即對(duì)數(shù)據(jù)進(jìn)行增,刪鉴吹,改姨伟,查的操作。 1.創(chuàng)建表的格式為 create t...
    彬至睢陽(yáng)閱讀 1,027評(píng)論 0 1
  • 這里將數(shù)據(jù)庫(kù)的封裝為一個(gè)工具類.將數(shù)據(jù)庫(kù)設(shè)計(jì)為一個(gè)單例,封裝一些打開(kāi),創(chuàng)建表格,增,刪,改,查的方法.在收藏功能中...
    BiniOSdeveloper閱讀 6,720評(píng)論 2 11
  • 最近項(xiàng)目中用到本地?cái)?shù)據(jù)庫(kù)存儲(chǔ)數(shù)據(jù)豆励,將具體的實(shí)現(xiàn)記錄一下夺荒。 1.數(shù)據(jù)庫(kù)的創(chuàng)建,創(chuàng)建了一個(gè)單例文件良蒸。.h文件代碼如下技扼。...
    妃雪閱讀 1,495評(píng)論 0 2
  • 哦吼吼,又研究了幾天嫩痰,把FMDB這個(gè)封裝好的數(shù)據(jù)庫(kù)搞定了剿吻,寫(xiě)了個(gè)簡(jiǎn)單的例子,基于FMDB的添刪改查操作串纺,界面很一般...
    lichengjin閱讀 527評(píng)論 0 0
  • 概述在iOS開(kāi)發(fā)中UITableView可以說(shuō)是使用最廣泛的控件丽旅,我們平時(shí)使用的軟件中到處都可以看到它的影子,類似...
    liudhkk閱讀 9,035評(píng)論 3 38