項(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)鍵在于你去如何封裝懦铺。