iOS · WCDB的使用

之前开发过的项目涉及到数据库操作都是使用了FMDB或者CoreData,直到最近接触到了使用WCDB的项目。茅舍顿开-数据存储不用再像FMDB那样每个业务都去些SQL语句了。当然CoreData大哥也是。但是WCDB是支持iOS、macOS、Android多平台的移动数据库框架!

WCDB的特性:

· 易用:WCDB支持一句代码即可将数据取出,并且组合成对象
· WINQ(WCDB语言集成查询):通过WINQ,无需再写SQL语句
· ORM(Object Relational Mapping):WCDB支持灵活、易用的ORM,可以便捷的定义表、索引、约束、并进行增删改查操作。
· 高效:性能比FMDB好
· 完整:WCDB满足了数据库相关的各种使用场景

直接上重点,如何使用WCDB?
CocoaPods安装WCDB:

target ‘yourProjectName' do
    platform :ios, ‘8.0'
    pod 'WCDB'
end

(注:WCDB中使用到了C,所以引用它的文件后缀需要把.m改成.mm)

引入头文件:

 #import <WCDB/WCDB.h>

1、创建数据库:

***.h
@interface WCBDManage : NSObject
+(instancetype)sharedManager;
@property (strong,nonatomic) WCTDatabase *dataBase;
@end
***.mm
#define kDataBaseFileName @“myWCDB.sqlite"
+(instancetype)sharedManager{
    static WCBDManage *manager = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        manager = [[WCBDManage alloc] init];
    });
    return manager;
    
}
-(instancetype)init{
    self = [super init];
    if (self) {
        [self createDataBase];
    }
    return self;
}
-(void)createDataBase{
    NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentationDirectory, NSUserDomainMask, YES) objectAtIndex:0];
    NSString *dbPath = [documentPath stringByAppendingString:kDataBaseFileName];
    self.dataBase = [[WCTDatabase alloc] initWithPath:dbPath];
}
@synthesize dataBase = _dataBase;

2、创建model,并映射到数据表中的字段 (需要遵循 WCTTableCoding 协议)

***.h
#import <Foundation/Foundation.h>
#import <WCDB/WCDB.h>
@interface OrderDBTable : NSObject<WCTTableCoding>
@property (assign,nonatomic) NSInteger orderId;
@property (strong,nonatomic) NSString *orderTitle;
@property (strong,nonatomic) NSString *orderDescribe;
@property (assign,nonatomic) float price;
//需要绑定到表的字段在这里声明,在.mm中绑定
WCDB_PROPERTY(orderId)
WCDB_PROPERTY(orderTitle)
WCDB_PROPERTY(orderDescribe)
WCDB_PROPERTY(price)
***.mm
@implementation OrderDBTable
WCDB_IMPLEMENTATION(OrderDBTable)    //该宏实现绑定到表
WCDB_SYNTHESIZE(OrderDBTable, orderId)    //该宏实现绑定到表的字段
WCDB_SYNTHESIZE(OrderDBTable, orderTitle)
WCDB_SYNTHESIZE(OrderDBTable, orderDescribe)
WCDB_SYNTHESIZE(OrderDBTable, price)

// 约束宏定义数据库的主键
WCDB_PRIMARY(OrderDBTable, orderId)
// 定义数据库的索引属性,它直接定义createTime字段为索引
// 同时 WCDB 会将表名 + "_index" 作为该索引的名称
// WCDB_INDEX(OrderDBTable, "_index", createTime)

@end

3、创建表

#define kDataBaseName_orderTable @“kDataBaseName_orderTable"
//创建表
-(void)createOrderTable{
    if (![[LuckyWCBDManage sharedManager].dataBase isTableExists:kDataBaseName_orderTable]) {
        BOOL isCreate = [[LuckyWCBDManage sharedManager].dataBase createTableAndIndexesOfName:kDataBaseName_orderTable withClass:LuckyOrderDBTable.class];
    }
}

4、数据操作

//增加一条数据
+(BOOL)insertObjectWithOrderModel:(OrderDBTable *)model{
    BOOL success = [[WCBDManage sharedManager].dataBase insertObject:model into:kDataBaseName_orderTable];
    return success;
}

//查找某张表中所有数据
+(NSMutableArray *)searchAllData{
    NSMutableArray *resultArr = [[NSMutableArray alloc] initWithCapacity:0];
    WCTTable *table = [[WCBDManage sharedManager].dataBase getTableOfName:kDataBaseName_orderTable withClass:LuckyOrderDBTable.class];
    NSArray<OrderDBTable *> *arr = [table getAllObjects];
    [resultArr addObjectsFromArray:arr];
    return resultArr;
}
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,451评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,172评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,782评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,709评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,733评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,578评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,320评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,241评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,686评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,878评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,992评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,715评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,336评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,912评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,040评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,173评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,947评论 2 355

推荐阅读更多精彩内容

  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明先生_X自主阅读 15,981评论 3 119
  • 一本书,一个朋友,一位导师,带你走进生活,领略人生,将你引入宽阔的人生地带,引进冰清玉洁的新殿堂,让你终身受益。 ...
    康瑞成成阅读 1,572评论 0 0
  • 写在前面:能做子女一场,是这一世的缘分,能做兄妹一场,也是这一世缘分,我们性格迥异,命运还未可知,我们的身体里流淌...
    云栖处阅读 1,130评论 5 6
  • 沟通是一门技能,想所有技能一样,都需要尝试反复练习然后习以为常,都要经历觉醒期 笨拙期 熟悉期 整合期,像学习一门...
    MrTimer阅读 409评论 0 0