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é)議
- 在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
- 在實現(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.
}];