ios FMDB使用

最近使用FMDB心得
废话不说直接上代码

DBConst.h

/** 数据库名称 */
static NSString * const cart_db_sqlite = @"chat_userinfo.sqlite";
/** 购物车 数据表名称 */
static NSString * const cart_name = @"hpbd_cart_table";


/** 商品缩略图 参数名 */
static NSString * const cart_table_mall_thumb = @"mall_thumb";
/** 商品名称 参数名 */
static NSString * const cart_table_mall_title = @"mall_title";
/** 商品单价 参数名 */
static NSString * const cart_table_mall_price = @"mall_price";
/** 商品数量 参数名 */
static NSString * const cart_table_mall_count = @"mall_count";
/** 商品ID 参数名 */
static NSString * const cart_table_mall_id = @"mall_id";
/** 商铺名称 */
static NSString * const cart_table_shop_name = @"shop_name";
/** 商铺id */
static NSString * const cart_table_shop_id = @"shop_id";
/** 商品库存 */
static NSString * const cart_table_mall_stock = @"mall_stock";
/** 创建时间 */
static NSString * const cart_table_create_time = @"create_time";

//  CartDBData.h
#import <Foundation/Foundation.h>

@interface CartDBData : NSObject

/** 商品名称 */
@property (nonatomic, copy) NSString *mallname;
/** 商品缩略图 */
@property (nonatomic, copy) NSString *mallthumb;
/** 商品id */
@property (nonatomic, copy) NSString *mallid;
/** 商品数量 */
@property (nonatomic, copy) NSString *mallcount;
/** 商品价格 */
@property (nonatomic, copy) NSString *mallprice;
/** 商铺名称 */
@property (nonatomic, copy) NSString *shopname;
/** 商铺id */
@property (nonatomic, copy) NSString *shopid;
/** 商品库存 */
@property (nonatomic, copy) NSString *mallstock;

@end
//  CardDBManage.h

#import <Foundation/Foundation.h>
#import "FMDatabase.h"
#import "DBConst.h"
#import "CartDBData.h"

@interface CardDBManage : NSObject

@property (nonatomic, strong) FMDatabase *cardDB;

/** 开启本地数据库,创建购物车数据表 */
+ (void)startDBService;

/** 新增/修改 商品的 商品信息/数量 */
+ (void)updateMallID:(NSString*)mallid
               thumb:(NSString*)thumb
                name:(NSString*)name
               price:(NSString*)price
               count:(NSString*)count
            shopname:(NSString*)shaopname
              shopid:(NSString*)shopid
               stock:(NSString*)stock;

/** 更新商品数量 */
+ (void)updateMallCount:(NSString*)count
             withMallId:(NSString*)mallid
                   type:(BOOL)isAdd;

/** 删除商品 */
+ (void)deleteMallWithID:(NSString*)mallid;

/** 提交订单成功后清空购物车 */
+ (void)clearCartList;

/** 查询购物车列表 */
+ (NSArray*)queryCartDatas;

/** 获取购物车内商品数量 */
+ (NSString*)getCartCount;

/** 查询某个商品的数量 */
+ (NSString*)getCountWithMallId:(NSString*)mallid;

/** 查询商品当前库存量 */
+ (NSString*)getMallStock:(NSString*)mallid;

/** 新增/修改 商品的 商品信息 */
+ (void)updateMallID:(NSString*)mallid
               thumb:(NSString*)thumb
                name:(NSString*)name
               price:(NSString*)price
            shopname:(NSString*)shaopname
              shopid:(NSString*)shopid
               stock:(NSString*)stock;

//  CardDBManage.m

#import "CardDBManage.h"

@implementation CardDBManage
+ (CardDBManage*)shareInstance
{
    static id shareInstance = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        shareInstance = [[self alloc] init];
    });
    return shareInstance;
}

#pragma mark - 创建数据库
+ (void)startDBService
{
    [[CardDBManage shareInstance] startService];
}

#pragma mark -
- (void)startService
{
    NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES) lastObject];
    NSString *fileName = [docPath stringByAppendingPathComponent:HPString(@"%@",cart_db_sqlite)];
    Dlog(@"===> [购物车DB路径] %@ <===",fileName);
    self.cardDB =[FMDatabase databaseWithPath:fileName];
    [self openDB];
    /**
     *  表中数据:商品ID、商品缩略图、商品名称、商品数量、商品单价、创建数据时间
     *
     */
    NSString *createCartTable = HPString(
                                             @"create table if not exists %@(%@ integer primary key autoincrement, %@ text, %@ text, %@ text, %@ text, %@ text, %@ text, %@ text, %@ text);",
                                              cart_name,
                                              cart_table_mall_id,
                                              cart_table_mall_thumb,
                                              cart_table_mall_title,
                                              cart_table_mall_price,
                                              cart_table_mall_count,
                                              cart_table_shop_name,
                                              cart_table_shop_id,
                                              cart_table_mall_stock,
                                              cart_table_create_time);
    BOOL createCartTableResult = [self.cardDB executeUpdate:createCartTable];
    if (createCartTableResult) {
        Dlog(@"创建购物车数据表成功");
    } else {
        Dlog(@"创建购物车数据表失败");
    }
    [self closeDB];
}

/** 新增/修改 商品的 商品信息 */
+ (void)updateMallID:(NSString*)mallid thumb:(NSString*)thumb name:(NSString*)name price:(NSString*)price shopname:(NSString*)shaopname shopid:(NSString*)shopid stock:(NSString*)stock
{
    [[CardDBManage shareInstance] updateMallID:mallid thumb:thumb name:name price:price shopname:shaopname shopid:shopid stock:stock];
}

- (void)updateMallID:(NSString*)mallid thumb:(NSString*)thumb name:(NSString*)name price:(NSString*)price shopname:(NSString*)shaopname shopid:(NSString*)shopid stock:(NSString*)stock
{
    BOOL hasSaved = [self hasSaved:mallid];
    [self openDB];
    NSString *sql = nil;
    if (hasSaved) { //已存储,更新
//        sql = HPString(@"UPDATE %@ SET '%@' = '%@','%@' = '%@','%@' = '%@', '%@' = '%@', '%@' = '%@', '%@' = '%@', '%@' = '%@' WHERE %@ = %@",
//                       cart_name,
//                       cart_table_mall_thumb,
//                       thumb,
//                       cart_table_mall_title,
//                       name,
//                       cart_table_mall_price,
//                       price,
//                       cart_table_mall_count,
//                       @"0",
//                       cart_table_shop_name,
//                       shaopname,
//                       cart_table_shop_id,
//                       shopid,
//                       cart_table_mall_stock,
//                       stock,
//                       cart_table_mall_id,
//                       mallid);
    } else {    //未存储,新增
        sql = HPString(@"INSERT INTO %@ ('%@','%@','%@','%@','%@','%@','%@','%@','%@') VALUES ('%@','%@','%@','%@','%@','%@','%@','%@','%@')",
                       cart_name,
                       cart_table_mall_id,
                       cart_table_mall_thumb,
                       cart_table_mall_title,
                       cart_table_mall_price,
                       cart_table_mall_count,
                       cart_table_create_time,
                       cart_table_shop_name,
                       cart_table_shop_id,
                       cart_table_mall_stock,
                       mallid,
                       thumb,
                       name,
                       price,
                       @"0",
                       [NSString getCurrentDate],
                       shaopname,
                       shopid,
                       stock);
    }
    BOOL result = [self.cardDB executeUpdate:sql];
    if (result) {
        if (hasSaved) {
            Dlog(@"[更新数据成功]");
        } else {
            Dlog(@"[新增数据成功]");
        }
    } else {
        if (hasSaved) {
            Dlog(@"[更新数据失败]");
        } else {
            Dlog(@"[新增数据失败]");
        }
    }
    [self closeDB];
}

#pragma mark - 新增/修改 商品的 商品信息/数量
+ (void)updateMallID:(NSString *)mallid thumb:(NSString *)thumb name:(NSString *)name price:(NSString *)price count:(NSString *)count shopname:(NSString *)shaopname shopid:(NSString*)shopid stock:(NSString *)stock
{
    [[CardDBManage shareInstance] updateMallID:mallid thumb:thumb name:name price:price count:count shopname:shaopname shopid:shopid stock:stock];
}

#pragma mark -
- (void)updateMallID:(NSString *)mallid thumb:(NSString *)thumb name:(NSString *)name price:(NSString *)price count:(NSString *)count shopname:(NSString *)shaopname shopid:(NSString*)shopid stock:(NSString *)stock
{
    BOOL hasSaved = [self hasSaved:mallid];
    [self openDB];
    NSString *sql = nil;
    if (hasSaved) { //已存储,更新 ps:需要先查出数量,累加1
        NSString *countSql = HPString(@"select * from %@ where %@ = %@",cart_name,cart_table_mall_id,mallid);
        FMResultSet *countResult =  [self.cardDB executeQuery:countSql];
        NSString *addCount = @"1";
        NSString *subCount = stock;
        while ([countResult next]) {
            CartDBData *data = [[CartDBData alloc] init];
            data.mallcount = [countResult stringForColumn:cart_table_mall_count];
            data.mallstock = [countResult stringForColumn:cart_table_mall_stock];
            addCount = HPString(@"%d",data.mallcount.intValue+count.intValue);
            subCount = HPString(@"%d",data.mallstock.intValue - count.intValue);
        }

        sql = HPString(@"UPDATE %@ SET '%@' = '%@','%@' = '%@','%@' = '%@', '%@' = '%@', '%@' = '%@', '%@' = '%@', '%@' = '%@' WHERE %@ = %@",
                       cart_name,
                       cart_table_mall_thumb,
                       thumb,
                       cart_table_mall_title,
                       name,
                       cart_table_mall_price,
                       price,
                       cart_table_mall_count,
                       addCount,
                       cart_table_shop_name,
                       shaopname,
                       cart_table_shop_id,
                       shopid,
                       cart_table_mall_stock,
                       subCount,
                       cart_table_mall_id,
                       mallid);
    } else {    //未存储,新增
        NSString *currentStock = HPString(@"%d",stock.intValue-1);
        sql = HPString(@"INSERT INTO %@ ('%@','%@','%@','%@','%@','%@','%@','%@','%@') VALUES ('%@','%@','%@','%@','%@','%@','%@','%@','%@')",
                       cart_name,
                       cart_table_mall_id,
                       cart_table_mall_thumb,
                       cart_table_mall_title,
                       cart_table_mall_price,
                       cart_table_mall_count,
                       cart_table_create_time,
                       cart_table_shop_name,
                       cart_table_shop_id,
                       cart_table_mall_stock,
                       mallid,
                       thumb,
                       name,
                       price,
                       count,
                       [NSString getCurrentDate],
                       shaopname,
                       shopid,
                       currentStock);
    }
    BOOL result = [self.cardDB executeUpdate:sql];
    if (result) {
        if (hasSaved) {
            Dlog(@"[更新数据成功]");
        } else {
            Dlog(@"[新增数据成功]");
        }
    } else {
        if (hasSaved) {
            Dlog(@"[更新数据失败]");
        } else {
            Dlog(@"[新增数据失败]");
        }
    }
    [self closeDB];
}

#pragma mark - 更新商品数量
+ (void)updateMallCount:(NSString *)count withMallId:(NSString *)mallid type:(BOOL)isAdd
{
    [[CardDBManage shareInstance] updateMallCount:count withMallId:mallid type:isAdd];
}

#pragma mark -
- (void)updateMallCount:(NSString *)count withMallId:(NSString *)mallid type:(BOOL)isAdd
{
    [self openDB];
    
    NSString *countSql = HPString(@"select * from %@ where %@ = %@",cart_name,cart_table_mall_id,mallid);
    FMResultSet *countResult =  [self.cardDB executeQuery:countSql];
    NSString *stockCount = @"0";
    while ([countResult next]) {
        CartDBData *data = [[CartDBData alloc] init];
        data.mallstock = [countResult stringForColumn:cart_table_mall_stock];
        stockCount = HPString(@"%@",data.mallstock);
    }
    
    if (isAdd) {
        stockCount = HPString(@"%d",stockCount.intValue-1);
    } else {
        stockCount = HPString(@"%d",stockCount.intValue+1);
    }

    NSString *sql = HPString(@"UPDATE %@ SET '%@' = '%@', '%@'='%@' WHERE %@ = %@",
                             cart_name,
                             cart_table_mall_count,
                             count,
                             cart_table_mall_stock,
                             stockCount,
                             cart_table_mall_id,
                             mallid);
    
    BOOL result = [self.cardDB executeUpdate:sql];
    if (result) {
        Dlog(@"更新商品数量成功");
    } else {
        Dlog(@"更新商品数量失败");
    }
    [self closeDB];
}


#pragma mark - 删除商品
+ (void)deleteMallWithID:(NSString *)mallid
{
    [[CardDBManage shareInstance] deleteMallWithID:mallid];
}

#pragma mark -
- (void)deleteMallWithID:(NSString *)mallid
{
    NSString *sql = HPString(@"DELETE FROM %@ WHERE %@ = %@",cart_name,cart_table_mall_id,mallid);
    [self openDB];
    BOOL result = [self.cardDB executeUpdate:sql];
    if (result) {
        [HubLoading showText:@"删除成功"];
    } else {
        [HubLoading showText:@"删除失败,请稍后重试"];
    }
    [self closeDB];
}

#pragma mark - 验证商品是否已存储
- (BOOL)hasSaved:(NSString *)mallid
{
    if (HPVerifyStrLegal(mallid)) {
        [self openDB];
        NSString *verifySql = [NSString stringWithFormat:@"select * from %@ where %@ = %@",cart_name,cart_table_mall_id,mallid];
        FMResultSet *resultSet = [self.cardDB executeQuery:verifySql];
        if ([resultSet next]) {
            [self closeDB];
            return YES;
        }
        [self closeDB];
        return NO;
    }
    return NO;
}

#pragma mark - 提交订单成功后清空购物车
+ (void)clearCartList
{
    [[CardDBManage shareInstance] clearCartList];
}

#pragma mark -
- (void)clearCartList
{
    NSString *sql = HPString(@"DELETE FROM %@",cart_name);
    [self openDB];
    BOOL clearResult = [self.cardDB executeUpdate:sql];
    if (clearResult) {
        Dlog(@"已清空购物车");
    } else {
        Dlog(@"清空购物车失败");
    }
    [self closeDB];
}

#pragma mark - 查询购物车列表
+ (NSArray*)queryCartDatas
{
    return [[CardDBManage shareInstance] queryCartDatas];
}

#pragma mark -
- (NSArray*)queryCartDatas
{
    NSMutableArray *cartDatas = [NSMutableArray arrayWithCapacity:0];
    NSString *sql = HPString(@"select * from %@",cart_name);
    [self openDB];
    FMResultSet *queryResult =  [self.cardDB executeQuery:sql];
    while ([queryResult next]) {
        if ([[queryResult stringForColumn:cart_table_mall_count] isEqualToString:@"0"])
        {
            break;
        }
        CartDBData *data = [[CartDBData alloc] init];
        data.mallid = [queryResult stringForColumn:cart_table_mall_id];
        data.mallthumb = [queryResult stringForColumn:cart_table_mall_thumb];
        data.mallname = [queryResult stringForColumn:cart_table_mall_title];
        data.mallcount = [queryResult stringForColumn:cart_table_mall_count];
        data.mallprice = [queryResult stringForColumn:cart_table_mall_price];
        data.shopname = [queryResult stringForColumn:cart_table_shop_name];
        data.shopid = [queryResult stringForColumn:cart_table_shop_id];
        [cartDatas addObject:data];
    }
    [self closeDB];
    return cartDatas;
}

+ (NSString*)getCartCount
{
    return [[CardDBManage shareInstance] getCartCount];
}

- (NSString*)getCartCount
{
    NSInteger count = 0;
    NSString *sql = HPString(@"select * from %@",cart_name);
    [self openDB];
    FMResultSet *queryResult =  [self.cardDB executeQuery:sql];
    while ([queryResult next]) {
        CartDBData *data = [[CartDBData alloc] init];
        data.mallcount = [queryResult stringForColumn:cart_table_mall_count];
        count = count+data.mallcount.integerValue;
    }
    [self closeDB];
    return HPString(@"%ld",(long)count);
}

+ (NSString*)getCountWithMallId:(NSString *)mallid
{
    return [[CardDBManage shareInstance] getCountWithMallId:mallid];
}

- (NSString*)getCountWithMallId:(NSString *)mallid
{
    NSInteger count = 0;
    NSString *sql = HPString(@"select * from %@ where %@ = %@",cart_name,cart_table_mall_id,mallid);
    [self openDB];
    FMResultSet *queryResult =  [self.cardDB executeQuery:sql];
    while ([queryResult next]) {
        CartDBData *data = [[CartDBData alloc] init];
        data.mallcount = [queryResult stringForColumn:cart_table_mall_count];
        count = count+data.mallcount.integerValue;
    }
    [self closeDB];
    return HPString(@"%ld",(long)count);
}

+ (NSString*)getMallStock:(NSString *)mallid
{
    return [[CardDBManage shareInstance] getMallStock:mallid];
}

- (NSString*)getMallStock:(NSString *)mallid
{
    NSInteger count = 0;
    NSString *sql = HPString(@"select * from %@ where %@ = %@",cart_name,cart_table_mall_id,mallid);
    [self openDB];
    FMResultSet *queryResult =  [self.cardDB executeQuery:sql];
    while ([queryResult next]) {
        CartDBData *data = [[CartDBData alloc] init];
        data.mallstock = [queryResult stringForColumn:cart_table_mall_stock];
        count = data.mallstock.integerValue;
    }
    [self closeDB];
    return HPString(@"%ld",(long)count);
}

#pragma mark - 打开数据库
- (BOOL)openDB
{
    return [self.cardDB open];
}

#pragma mark - 关闭数据库
- (BOOL)closeDB
{
    return [self.cardDB close];
}

app启动的时候调用
//购物车
    [CardDBManage startDBService];
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,176评论 5 469
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,190评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,232评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,953评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,879评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,177评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,626评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,295评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,436评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,365评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,414评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,096评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,685评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,771评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,987评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,438评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,032评论 2 341

推荐阅读更多精彩内容

  • 一、FMDB简介 什么是FMDBFMDB是iOS平台的SQLite数据库 框架FMDB以面向OC的方式封装了SQL...
    iOS_成才录阅读 17,379评论 11 83
  • 1/3. 向项目中引入FMDB库,可以使用cocoapods也可以直接手动添加,手动添加时需要自己导入对libsq...
    莫_名阅读 803评论 0 1
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,280评论 25 707
  • 这张图是在朋友圈看到的,因为一早就看到朋友圈被刷屏,不知道用什么语言来形容自己的心情,正好这张图出现了,这回要做一...
    做个思行者阅读 389评论 4 4
  • 初来乍到! 是因为看到我的老大姑(且或者就是应该称呼他z律师吧),这个与我大学四年的宿舍老大兼毕业七年的法学届挚友...
    熊哥转型忙阅读 271评论 1 0