WCDB是一个高效、完整、易用的移动数据库框架,基于SQLCipher,支持iOS, macOS和Android。
前几年的项目用到的数据库框架,都是FMDB。从最初的摸索到工具类的封装,也是经历了一番坎坷。FMDB每次写SQL语句时,都要拼接一大坨胶水代码,着实恶心。期间接受过一个模块,是做原生聊天的,对于消息并发、接收、展示,上一任都频繁的使用数据库的增删改查。导致聊天多、快时,严重消耗CPU,甚至闪退(后来聊天重做了,哈哈,经过我的优化,CPU消耗减少了2/3)。吐槽了一波。。。就想表达FMDB的笨重难用。后来偶然的机会,一个技术公众号给我推广了一篇文章,这才接触到了WCDB,也决定了以后的项目数据库框架都用WCDB了。
![什么鬼,图片不显示](https://img-blog.csdn.net/20180202104519373?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGpfbG92ZQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
Example:
@interface Message : NSObject
@property int localID;
@property(retain) NSString *content;
@property(retain) NSDate *createTime;
@property(retain) NSDate *modifiedTime;
@property(assign) int unused;
@end
#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
#import "Message.h"
#import <WCDB/WCDB.h>
@interface Message (WCTTableCoding) <WCTTableCoding>
WCDB_PROPERTY(localID)
WCDB_PROPERTY(content)
WCDB_PROPERTY(createTime)
WCDB_PROPERTY(modifiedTime)
@end
WCTDatabase *database = [[WCTDatabase alloc] initWithPath:path];
BOOL result = [database createTableAndIndexesOfName:@"message"
withClass:Message.class];
增:
//插入
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"];
删:
BOOL result = [database deleteObjectsFromTable:@"message"
where:Message.localID > 0];
改:
//修改
//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];
查:
//查询
//SELECT * FROM message ORDER BY localID
NSArray<Message *> *message = [database getObjectsOfClass:Message.class
fromTable:@"message"
orderBy:Message.localID.order()];
//[更多关于增删改查的接口](https://github.com/Tencent/wcdb/wiki/%E5%9F%BA%E7%A1%80%E7%B1%BB%E3%80%81CRUD%E4%B8%8ETransaction)
加密:
WCTDatabase *database = [[WCTDatabase alloc] initWithPath:path];
NSData *password = [@"MyPassword" dataUsingEncoding:NSASCIIStringEncoding];
[database setCipherKey:password];