iOS · WCDB的使用

之前開發(fā)過的項目涉及到數(shù)據(jù)庫操作都是使用了FMDB或者CoreData,直到最近接觸到了使用WCDB的項目。茅舍頓開-數(shù)據(jù)存儲不用再像FMDB那樣每個業(yè)務都去些SQL語句了。當然CoreData大哥也是。但是WCDB是支持iOS、macOS、Android多平臺的移動數(shù)據(jù)庫框架!

WCDB的特性:

· 易用:WCDB支持一句代碼即可將數(shù)據(jù)取出,并且組合成對象
· WINQ(WCDB語言集成查詢):通過WINQ,無需再寫SQL語句
· ORM(Object Relational Mapping):WCDB支持靈活、易用的ORM,可以便捷的定義表、索引、約束、并進行增刪改查操作。
· 高效:性能比FMDB好
· 完整:WCDB滿足了數(shù)據(jù)庫相關的各種使用場景

直接上重點,如何使用WCDB?
CocoaPods安裝WCDB:

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

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

引入頭文件:

 #import <WCDB/WCDB.h>

1、創(chuàng)建數(shù)據(jù)庫:

***.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、創(chuàng)建model,并映射到數(shù)據(jù)表中的字段 (需要遵循 WCTTableCoding 協(xié)議)

***.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)    //該宏實現(xiàn)綁定到表
WCDB_SYNTHESIZE(OrderDBTable, orderId)    //該宏實現(xiàn)綁定到表的字段
WCDB_SYNTHESIZE(OrderDBTable, orderTitle)
WCDB_SYNTHESIZE(OrderDBTable, orderDescribe)
WCDB_SYNTHESIZE(OrderDBTable, price)

// 約束宏定義數(shù)據(jù)庫的主鍵
WCDB_PRIMARY(OrderDBTable, orderId)
// 定義數(shù)據(jù)庫的索引屬性,它直接定義createTime字段為索引
// 同時 WCDB 會將表名 + "_index" 作為該索引的名稱
// WCDB_INDEX(OrderDBTable, "_index", createTime)

@end

3、創(chuàng)建表

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

4、數(shù)據(jù)操作

//增加一條數(shù)據(jù)
+(BOOL)insertObjectWithOrderModel:(OrderDBTable *)model{
    BOOL success = [[WCBDManage sharedManager].dataBase insertObject:model into:kDataBaseName_orderTable];
    return success;
}

//查找某張表中所有數(shù)據(jù)
+(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;
}
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 1、通過CocoaPods安裝項目名稱項目信息 AFNetworking網(wǎng)絡請求組件 FMDB本地數(shù)據(jù)庫組件 SD...
    陽明AI閱讀 16,203評論 3 119
  • 一本書,一個朋友,一位導師,帶你走進生活,領略人生,將你引入寬闊的人生地帶,引進冰清玉潔的新殿堂,讓你終身受益。 ...
    康瑞成成閱讀 1,701評論 0 0
  • 寫在前面:能做子女一場,是這一世的緣分,能做兄妹一場,也是這一世緣分,我們性格迥異,命運還未可知,我們的身體里流淌...
    云棲處閱讀 1,194評論 5 6
  • 溝通是一門技能,想所有技能一樣,都需要嘗試反復練習然后習以為常,都要經(jīng)歷覺醒期 笨拙期 熟悉期 整合期,像學習一門...
    MrTimer閱讀 449評論 0 0

友情鏈接更多精彩內容