iOS数据库框架 WCDB的使用详解

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:

   //Message.h
@interface Message : NSObject

@property int localID;
@property(retain) NSString *content;
@property(retain) NSDate *createTime;
@property(retain) NSDate *modifiedTime;
@property(assign) int unused; 

@end

 //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

//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

//定义完成后,只需要调用createTableAndIndexesOfName:withClass:接口,即可创建表和索引。
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];


//[各种宏定义解释查找查考:](https://github.com/Tencent/wcdb/wiki/ORM%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B)

增:

//插入
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"];   

删:

//删除
//DELETE FROM message WHERE localID>0;
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];

猜你喜欢

转载自blog.csdn.net/xj_love/article/details/78803653