WCDB 使用

1. 安裝:使用Cocoapods安裝

pod 'WCDB'

2. 使用

2.1 實現(xiàn) WCTTableCoding 協(xié)議

  • 類的定義:類的定義跟普通類的定義相似
//Message.h
@interface Message : NSObject

@property int localID;
@property(retain) NSString *content;
@property(retain) NSDate *createTime;
@property(retain) NSDate *modifiedTime;
@property(assign) int unused; //You can only define the properties you need

@end
  • 實現(xiàn)WCTTableCoding協(xié)議
  1. 在category里遵循WCTTableCoding協(xié)議,并定義數(shù)據(jù)庫相關(guān)字段
//Message+WCTTableCoding.h
#import "Message.h"
#import <WCDB/WCDB.h>

@interface Message (WCTTableCoding) <WCTTableCoding>

WCDB_PROPERTY(localID)
WCDB_PROPERTY(content)
WCDB_PROPERTY(createTime)
WCDB_PROPERTY(modifiedTime)

@end
  1. 在實現(xiàn)文件里實現(xiàn)相關(guān)字段
//Message.mm
#import "Message.h"
@implementation Message

WCDB_IMPLEMENTATION(Message)
WCDB_SYNTHESIZE(Message, localID)
WCDB_SYNTHESIZE(Message, content)
WCDB_SYNTHESIZE(Message, createTime)
WCDB_SYNTHESIZE(Message, modifiedTime)

WCDB_PRIMARY(Message, localID)

WCDB_INDEX(Message, "_index", createTime)

@end

相關(guān)宏定義:

  • 定義該類遵循WCTTableCoding協(xié)議所袁。
  • 使用WCDB_PROPERTY宏在頭文件聲明需要綁定到數(shù)據(jù)庫表的字段欢唾。
  • 使用WCDB_IMPLEMENTATIO宏在類文件定義綁定到數(shù)據(jù)庫表的類。
  • 使用WCDB_SYNTHESIZE宏在類文件定義需要綁定到數(shù)據(jù)庫表的字段拼缝。

除此之外妈踊,WCDB還提供了許多可選的宏了嚎,用于定義數(shù)據(jù)庫索引、約束等,如:
WCDB_PRIMARY 用于定義主鍵
WCDB_INDEX 用于定義索引
WCDB_UNIQUE 用于定義唯一約束
WCDB_NOT_NULL 用于定義非空約束

2.2 使用:創(chuàng)建表及增刪改查(CRUD)

2.2.1 創(chuàng)建表和索引

定義完成后歪泳,只需要調(diào)用createTableAndIndexesOfName:withClass:接口萝勤,即可創(chuàng)建表和索引。

WCTDatabase *database = [[WCTDatabase alloc] initWithPath:path];
/*
 CREATE TABLE messsage (localID INTEGER PRIMARY KEY,
                        content TEXT,
                        createTime BLOB,
                        modifiedTime BLOB)
 */
BOOL result = [database createTableAndIndexesOfName:@"message"
                                          withClass:Message.class];

2.2.2 插入

  • 插入
//插入
Message *message = [[Message alloc] init];
message.localID = 1;
message.content = @"Hello, WCDB!";
message.createTime = [NSDate date];
message.modifiedTime = [NSDate date];
/*
 INSERT INTO message(localID, content, createTime, modifiedTime) 
 VALUES(1, "Hello, WCDB!", 1496396165, 1496396165);
 */
BOOL result = [database insertObject:message
                                into:@"message"];
  • 插入或者替換
//插入
Message *message = [[Message alloc] init];
message.localID = 1;
message.content = @"Hello, WCDB!";
message.createTime = [NSDate date];
message.modifiedTime = [NSDate date];
/*
 INSERT INTO message(localID, content, createTime, modifiedTime) 
 VALUES(1, "Hello, WCDB!", 1496396165, 1496396165);
 */
BOOL result = [database insertOrReplaceObject:message
                                into:@"message"];

2.2.2 刪除

//刪除
//DELETE FROM message WHERE localID>0;
BOOL result = [database deleteObjectsFromTable:@"message"
                                         where:Message.localID > 0];

2.2.3 修改(更新)

//修改
//UPDATE message SET content="Hello, Wechat!";
Message *message = [[Message alloc] init];
message.content = @"Hello, Wechat!";
BOOL result = [database updateRowsInTable:@"message"
                             onProperties:Message.content
                               withObject:message];

2.2.4 查詢

//查詢
//SELECT * FROM message ORDER BY localID
NSArray<Message *> *message = [database getObjectsOfClass:Message.class
                                                fromTable:@"message"
                                                  orderBy:Message.localID.order()];

更多關(guān)于增刪改查的接口呐伞,請參考:基礎(chǔ)類纵刘、CRUD與Transaction

2.2.5 事務(wù)

BOOL commited = [database runTransaction:^BOOL {
    [database insertObject:message into:@"message"];
    return YES; //return YES to commit transaction and return NO to rollback transaction.
}];
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市荸哟,隨后出現(xiàn)的幾起案子假哎,更是在濱河造成了極大的恐慌,老刑警劉巖鞍历,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件舵抹,死亡現(xiàn)場離奇詭異,居然都是意外死亡劣砍,警方通過查閱死者的電腦和手機惧蛹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來刑枝,“玉大人香嗓,你說我怎么就攤上這事∽俺” “怎么了靠娱?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長掠兄。 經(jīng)常有香客問我像云,道長,這世上最難降的妖魔是什么蚂夕? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任迅诬,我火速辦了婚禮,結(jié)果婚禮上婿牍,老公的妹妹穿的比我還像新娘侈贷。我一直安慰自己,他們只是感情好等脂,可當我...
    茶點故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布俏蛮。 她就那樣靜靜地躺著,像睡著了一般慎菲。 火紅的嫁衣襯著肌膚如雪嫁蛇。 梳的紋絲不亂的頭發(fā)上锨并,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天露该,我揣著相機與錄音,去河邊找鬼第煮。 笑死解幼,一個胖子當著我的面吹牛抑党,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播撵摆,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼底靠,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了特铝?” 一聲冷哼從身側(cè)響起暑中,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎鲫剿,沒想到半個月后鳄逾,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡灵莲,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年雕凹,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片政冻。...
    茶點故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡枚抵,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出明场,到底是詐尸還是另有隱情汽摹,我是刑警寧澤,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布苦锨,位于F島的核電站竖慧,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏逆屡。R本人自食惡果不足惜圾旨,卻給世界環(huán)境...
    茶點故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望魏蔗。 院中可真熱鬧砍的,春花似錦、人聲如沸莺治。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽谣旁。三九已至床佳,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間榄审,已是汗流浹背砌们。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人浪感。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓昔头,卻偏偏與公主長得像,于是被迫代替她去往敵國和親影兽。 傳聞我的和親對象是個殘疾皇子揭斧,可洞房花燭夜當晚...
    茶點故事閱讀 45,435評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 前言 WCDB是微信移動端團隊開源的移動端數(shù)據(jù)庫組件,提供了一個高效峻堰、完整讹开、易用的移動端存儲方案。第一次應(yīng)用到WC...
    沙琪瑪dd閱讀 21,627評論 3 18
  • 之前開發(fā)過的項目涉及到數(shù)據(jù)庫操作都是使用了FMDB或者CoreData捐名,直到最近接觸到了使用WCDB的項目萧吠。茅舍頓...
    愛迪生的小跟班閱讀 6,322評論 2 5
  • 使用簡介iOS 官方使用教程從FMDB遷移到WCDB 基本特性 易用,WCDB支持一句代碼即可將數(shù)據(jù)取出并組合為o...
    江水東流閱讀 28,175評論 26 25
  • 本地數(shù)據(jù)加密 由于項目涉及到一些用戶隱私數(shù)據(jù)的存儲桐筏,所以需要對保存在客戶端本地的數(shù)據(jù)進行加密纸型,以防止用戶隱私數(shù)據(jù)在...
    codeKeeper閱讀 5,710評論 2 2
  • 1.WCDB 創(chuàng)建創(chuàng)建的路徑上的最后文件名的后綴必須有.db 字樣,否則創(chuàng)建失敗2.一個路徑的一個db可以有多個表...
    幸福曉杰2016閱讀 6,427評論 9 7