iOS FMDB簡單封裝(臨時購物車為例)

項(xiàng)目需求

最近項(xiàng)目要添加一個臨時購物車芳室, 就是在沒有登錄的情況下虹钮,用戶可以對購物車進(jìn)行修改刪除添加單選多選等操作坝冕。而且用戶清除緩存數(shù)據(jù)還會存在梨树。這樣的話就得需要創(chuàng)建一張表,將商品的信息添加進(jìn)去涨共。從而對表進(jìn)行增刪改查操作纽帖。

代碼實(shí)現(xiàn)

.h


#import <Foundation/Foundation.h>

@interface FMDBData : NSObject


//插入數(shù)據(jù)
+ (void)insertDatawithGoods:(NSDictionary *)goods;
//修改全部數(shù)據(jù)
+ (void)updateWithGoodsList:(NSDictionary *)goods;
//修改單條數(shù)據(jù)
+ (void)udateWithGoods:(NSDictionary *)goods;
//刪除數(shù)據(jù)
+ (void)removeGoods:(NSString *)goodsId;
//查詢數(shù)據(jù)
+ (NSArray *)selectGoodsList;
//刪除數(shù)據(jù)庫
+ (BOOL)dropGoodsList;
@end

.m

#import "FMDBData.h"
#import <FMDB/FMDB.h>

@implementation FMDBData
static FMDatabase *_db;

+(void)initialize {
    [FMDBData initDBwithName:@"goodsList"];
}
//創(chuàng)建數(shù)據(jù)庫
+ (void)initDBwithName:(NSString *)name {
    NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
    NSString *fileName = [doc stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.selite", name]];
    FMDatabase *db = [FMDatabase databaseWithPath:fileName];
    if ([db open]) {
        BOOL result = [db executeUpdate:@"CREATE TABLE IF NOT EXISTS goodsList(name text NOT NULL, imageUrl text NOT NULL, price text NOT NULL, goodsID text NOT NULL, stock integer NOT NULL, number integer NOT NULL, weight integer NOT NULL, isSelect integer NOT NULL);"];
//這張表中一條數(shù)據(jù)有八個屬性,包括基本的圖片地址(imageUrl)举反,價格信息(price)懊直,數(shù)量(number),是否選中(isSelect)火鼻,貨品ID(goodsID)室囊,重量(weight),庫存(stock)魁索,商品名字(name);
        if (result) {
            NSLog(@"創(chuàng)表成功");
        } else {
            NSLog(@"創(chuàng)表失敗");
        }
    }
    _db = db;
}

+ (void)insertDatawithGoods:(NSDictionary *)goods {

    BOOL isGoods = YES;
    NSString *goodsID = [goods valueForKey:@"goodsID"];
    NSInteger oldNumber = [[goods valueForKey:@"number"]integerValue];
    //查詢
    FMResultSet *resultSet = [_db executeQuery:@"SELECT * FROM goodsList WHERE goodsID = ?",goodsID];
    while ([resultSet next]) {
        isGoods = NO;
        //修改在加入購物者界面不知道購物車中是否有相同商品波俄,如果沒有則插入數(shù)據(jù),如果有則修改數(shù)據(jù)
        NSInteger number = [resultSet intForColumn:@"number"] + oldNumber;
     BOOL result = [_db executeUpdate:@"UPDATE goodsList SET number = ? WHERE goodsID = ?", @(number), goodsID];
        if (result) {
            NSLog(@"修改成功");
        }  else {
            NSLog(@"修改失敗");
        }
    }
    if (isGoods) {
        //插入
       BOOL result = [_db executeUpdate:@"INSERT INTO goodsList (name, imageUrl, price, goodsID, stock, number, weight, isSelect) VALUES (?, ?, ?, ?, ?, ?, ?, ?);", [goods valueForKey:@"name"], [goods valueForKey:@"imageUrl"], [goods valueForKey:@"price"], goodsID, @([[goods valueForKey:@"stock"] integerValue]), @(oldNumber), @([[goods valueForKey:@"weight"] integerValue]), @([[goods valueForKey:@"isSelect"] integerValue])];
        if (result) {
            NSLog(@"插入成功");
        } else {
            NSLog(@"插入失敗");
        }
    }
}

+ (void)udateWithGoods:(NSDictionary *)goods {
    BOOL isSelect = NO;
    NSString *goodsID = [goods valueForKey:@"goodsID"];
    NSArray *keyArr = goods.allKeys;
    for (NSString *key in keyArr) {
        if ([key isEqualToString:@"isSelect"]) {
            isSelect = YES;
        }
    }
    if (isSelect) {
        NSInteger oldNumber = [[goods valueForKey:@"isSelect"] integerValue];
        if (goodsID == nil) {
            BOOL result = [_db executeUpdate:@"UPDATE goodsList SET isSelect = ?", @(oldNumber)];
            if (result) {
                NSLog(@"修改成功");
            }  else {
                NSLog(@"修改失敗");
            }
        } else {
            //查詢
            FMResultSet *resultSet = [_db executeQuery:@"SELECT * FROM goodsList WHERE goodsID = ?",goodsID];
            while ([resultSet next]) {
                //修改
                BOOL result = [_db executeUpdate:@"UPDATE goodsList SET isSelect = ? WHERE goodsID = ?", @(oldNumber), goodsID];
                if (result) {
                    NSLog(@"修改成功");
                }  else {
                    NSLog(@"修改失敗");
                }
            }
        }

    } else {
        NSInteger oldNumber = [[goods valueForKey:@"number"] integerValue];
        //查詢
        FMResultSet *resultSet = [_db executeQuery:@"SELECT * FROM goodsList WHERE goodsID = ?",goodsID];
        while ([resultSet next]) {
            //修改
            BOOL result = [_db executeUpdate:@"UPDATE goodsList SET number = ? WHERE goodsID = ?", @(oldNumber), goodsID];
            if (result) {
                NSLog(@"修改成功");
            }  else {
                NSLog(@"修改失敗");
            }
        }
    }

}

+ (void)updateWithGoodsList:(NSDictionary *)goods {
    NSInteger oldNumber = [[goods valueForKey:@"isSelect"] integerValue];
    //查詢
    FMResultSet *resultSet = [_db executeQuery:@"SELECT * FROM goodsList?"];
    while ([resultSet next]) {
        //修改
        BOOL result = [_db executeUpdate:@"UPDATE goodsList SET isSelect = ?", @(oldNumber)];
        if (result) {
            NSLog(@"修改成功");
        }  else {
            NSLog(@"修改失敗");
        }
    }
}

+ (void)removeGoods:(NSString *)goodsId {
    BOOL result;
    if ([goodsId isEqualToString:@"1"]) {
         result = [_db executeUpdate:@"DELETE FROM goodsList WHERE isSelect = 1"];
    } else {
         result = [_db executeUpdate:@"DELETE FROM goodsList WHERE goodsID = ?", goodsId];

    }
    if (result) {
        NSLog(@"刪除成功");
    } else {
        NSLog(@"刪除失敗");
    }
}

+ (NSArray *)selectGoodsList {
    FMResultSet *resultSet = [_db executeQuery:@"SELECT * FROM goodsList"];
    NSMutableArray * goodsarr = [NSMutableArray array];
    while ([resultSet next]) {
        NSString *name = [resultSet stringForColumn:@"name"];
        NSString *imageUrl = [resultSet stringForColumn:@"imageUrl"];
        NSString *price = [resultSet stringForColumn:@"price"];
        NSString *goodsID  = [resultSet stringForColumn:@"goodsID"];
        NSInteger stock = [resultSet intForColumn:@"stock"];
        NSInteger number = [resultSet intForColumn:@"number"];
        NSInteger isSelect = [resultSet intForColumn:@"isSelect"];
        NSInteger weight = [resultSet intForColumn:@"weight"];
        NSDictionary *dic = @{@"name": name, @"imageUrl": imageUrl, @"price": price, @"goodsID": goodsID, @"stock": @(stock), @"number": @(number), @"isSelect":@(isSelect), @"weight":@(weight)};
        [goodsarr addObject:dic];
    }
    return goodsarr;
}

+ (BOOL)dropGoodsList {
    return [_db executeUpdate:@"DELETE FROM goodsList"];
}

@end

總的來說FMDB還是挺好用的蛾默,關(guān)鍵在于你去如何封裝懦铺。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市支鸡,隨后出現(xiàn)的幾起案子冬念,更是在濱河造成了極大的恐慌,老刑警劉巖牧挣,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件急前,死亡現(xiàn)場離奇詭異,居然都是意外死亡瀑构,警方通過查閱死者的電腦和手機(jī)裆针,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進(jìn)店門刨摩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人世吨,你說我怎么就攤上這事澡刹。” “怎么了耘婚?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵罢浇,是天一觀的道長。 經(jīng)常有香客問我沐祷,道長嚷闭,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任赖临,我火速辦了婚禮胞锰,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘兢榨。我一直安慰自己嗅榕,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布色乾。 她就那樣靜靜地躺著誊册,像睡著了一般领突。 火紅的嫁衣襯著肌膚如雪暖璧。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天君旦,我揣著相機(jī)與錄音澎办,去河邊找鬼。 笑死金砍,一個胖子當(dāng)著我的面吹牛局蚀,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播恕稠,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼琅绅,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了鹅巍?” 一聲冷哼從身側(cè)響起千扶,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎骆捧,沒想到半個月后澎羞,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡敛苇,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年妆绞,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,991評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡括饶,死狀恐怖株茶,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情巷帝,我是刑警寧澤忌卤,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站楞泼,受9級特大地震影響驰徊,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜堕阔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一棍厂、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧超陆,春花似錦牺弹、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至谨娜,卻和暖如春航攒,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背趴梢。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工漠畜, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人坞靶。 一個月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓憔狞,卻偏偏與公主長得像,于是被迫代替她去往敵國和親彰阴。 傳聞我的和親對象是個殘疾皇子瘾敢,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,941評論 2 355

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

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件尿这、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,104評論 4 62
  • 觀月憶辯論賽 龍鳳爭騰舞簇抵,明月凝眸出。 因何桂相思妻味?因何吳伐木正压? 多言總迷惑,實(shí)則心明此责球。 不問何緣由焦履,此景貴可詩拓劝。
    ToyIHere閱讀 327評論 0 1
  • 感賞兒子這幾天也沒有因?yàn)橛螒虿婚_心。也沒有提過王者榮耀這個游戲嘉裤!我們還是按照規(guī)矩來郑临,按照計(jì)劃表玩游戲,如果超時間屑宠,...
    玲燕閱讀 105評論 0 5
  • 有時候會在現(xiàn)在這樣的心情想該用什么樣的勇氣什么樣的措辭來對你已經(jīng)不能承受的愛情說一聲再見厢洞,我很佩服那些拿得起放得下...
    域外芳草之無題閱讀 249評論 0 0
  • 約飯 約雪 誰來
    Suit_mob閱讀 120評論 0 0