WCDB 使用

1. 安装:使用Cocoapods安装

pod 'WCDB'

2. 使用

2.1 实现 WCTTableCoding 协议

  • 类的定义:类的定义跟普通类的定义相似
//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
  • 实现WCTTableCoding协议
  1. 在category里遵循WCTTableCoding协议,并定义数据库相关字段
//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. 在实现文件里实现相关字段
//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

相关宏定义:

  • 定义该类遵循WCTTableCoding协议。
  • 使用WCDB_PROPERTY宏在头文件声明需要绑定到数据库表的字段。
  • 使用WCDB_IMPLEMENTATIO宏在类文件定义绑定到数据库表的类。
  • 使用WCDB_SYNTHESIZE宏在类文件定义需要绑定到数据库表的字段。

除此之外,WCDB还提供了许多可选的宏,用于定义数据库索引、约束等,如:
WCDB_PRIMARY 用于定义主键
WCDB_INDEX 用于定义索引
WCDB_UNIQUE 用于定义唯一约束
WCDB_NOT_NULL 用于定义非空约束

2.2 使用:创建表及增删改查(CRUD)

2.2.1 创建表和索引

定义完成后,只需要调用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];

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()];

更多关于增删改查的接口,请参考:基础类、CRUD与Transaction

2.2.5 事务

BOOL commited = [database runTransaction:^BOOL {
    [database insertObject:message into:@"message"];
    return YES; //return YES to commit transaction and return NO to rollback transaction.
}];
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 前言 WCDB是微信移动端团队开源的移动端数据库组件,提供了一个高效、完整、易用的移动端存储方案。第一次应用到WC...
    沙琪玛dd阅读 21,899评论 3 18
  • 之前开发过的项目涉及到数据库操作都是使用了FMDB或者CoreData,直到最近接触到了使用WCDB的项目。茅舍顿...
    爱迪生的小跟班阅读 11,544评论 2 5
  • 使用简介iOS 官方使用教程从FMDB迁移到WCDB 基本特性 易用,WCDB支持一句代码即可将数据取出并组合为o...
    江水东流阅读 28,464评论 26 25
  • 本地数据加密 由于项目涉及到一些用户隐私数据的存储,所以需要对保存在客户端本地的数据进行加密,以防止用户隐私数据在...
    codeKeeper阅读 11,017评论 2 2
  • 1.WCDB 创建创建的路径上的最后文件名的后缀必须有.db 字样,否则创建失败2.一个路径的一个db可以有多个表...
    幸福晓杰2016阅读 11,598评论 9 7

友情链接更多精彩内容