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

項目需求

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

代碼實現(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)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,338評論 4 61
  • 心醉,動情
    增祥影媒閱讀 177評論 0 0
  • 觀月憶辯論賽 龍鳳爭騰舞,明月凝眸出。 因何桂相思?因何吳伐木? 多言總迷惑,實則心明此。 不問何緣由,此景貴可詩。
    ToyIHere閱讀 399評論 0 1
  • 感賞兒子這幾天也沒有因為游戲不開心。也沒有提過王者榮耀這個游戲!我們還是按照規(guī)矩來,按照計劃表玩游戲,如果超時間,...
    玲燕閱讀 137評論 0 5
  • 有時候會在現(xiàn)在這樣的心情想該用什么樣的勇氣什么樣的措辭來對你已經(jīng)不能承受的愛情說一聲再見,我很佩服那些拿得起放得下...
    域外芳草之無題閱讀 277評論 0 0

友情鏈接更多精彩內(nèi)容