iOS FMDB简单封装(临时购物车为例)

项目需求

最近项目要添加一个临时购物车, 就是在没有登录的情况下,用户可以对购物车进行修改删除添加单选多选等操作。而且用户清除缓存数据还会存在。这样的话就得需要创建一张表,将商品的信息添加进去。从而对表进行增删改查操作。

代码实现

.h


#import <Foundation/Foundation.h>

@interface FMDBData : NSObject


//插入数据
+ (void)insertDatawithGoods:(NSDictionary *)goods;
//修改全部数据
+ (void)updateWithGoodsList:(NSDictionary *)goods;
//修改单条数据
+ (void)udateWithGoods:(NSDictionary *)goods;
//删除数据
+ (void)removeGoods:(NSString *)goodsId;
//查询数据
+ (NSArray *)selectGoodsList;
//删除数据库
+ (BOOL)dropGoodsList;
@end

.m

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

@implementation FMDBData
static FMDatabase *_db;

+(void)initialize {
    [FMDBData initDBwithName:@"goodsList"];
}
//创建数据库
+ (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);"];
//这张表中一条数据有八个属性,包括基本的图片地址(imageUrl),价格信息(price),数量(number),是否选中(isSelect),货品ID(goodsID),重量(weight),库存(stock),商品名字(name);
        if (result) {
            NSLog(@"创表成功");
        } else {
            NSLog(@"创表失败");
        }
    }
    _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;
        //修改在加入购物者界面不知道购物车中是否有相同商品,如果没有则插入数据,如果有则修改数据
        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还是挺好用的,关键在于你去如何封装。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,825评论 4 61
  • 心醉,动情
    增祥影媒阅读 1,315评论 0 0
  • 观月忆辩论赛 龙凤争腾舞,明月凝眸出。 因何桂相思?因何吴伐木? 多言总迷惑,实则心明此。 不问何缘由,此景贵可诗。
    ToyIHere阅读 2,839评论 0 1
  • 感赏儿子这几天也没有因为游戏不开心。也没有提过王者荣耀这个游戏!我们还是按照规矩来,按照计划表玩游戏,如果超时间,...
    玲燕阅读 1,162评论 0 5
  • 有时候会在现在这样的心情想该用什么样的勇气什么样的措辞来对你已经不能承受的爱情说一声再见,我很佩服那些拿得起放得下...
    域外芳草之无题阅读 1,783评论 0 0

友情链接更多精彩内容