iOS开发 数据存储之WCDB的使用
来源:互联网 发布:sql语句查询最高两位 编辑:程序博客网 时间:2024/06/06 03:14
一.类字段绑定
在WCDB内,ORM(Object Relational Mapping)是指
- 将一个ObjC的类,映射到数据库的表和索引;
- 将类的property,映射到数据库表的字段;
这一过程。通过ORM,可以达到直接通过Object进行数据库操作,省去拼装过程的目的。
WCDB通过内建的宏实现ORM的功能。如下:
新建一个Model:
.h文件
#import<Foundation/Foundation.h>#import<WCDB/WCDB.h> // 要导入WCDB//Message.h// 继承WCTTableCoding@interface Message : NSObject/**信息ID*/@property (nonatomic, assign) NSInteger messageId;/**信息标题*/@property (nonatomic, strong) NSString *title;/**信息创建时间*/@property (nonatomic, assign) NSInteger createTime;/**信息内容*/@property (nonatomic, strong) NSString *content;/**信息字数*/@property (nonatomic, assign) NSInteger count;// 实现WCTTableCoding代理WCDB_PROPERTY(messageId)WCDB_PROPERTY(title)WCDB_PROPERTY(createTime)WCDB_PROPERTY(content)WCDB_PROPERTY(count)@end
.mm文件(这里需要把.m文件改为.mm文件,因为WCDB是基于Objective-C++)
// Message.mm#import "Message.h"@implementation Message// 使用 WCDB_IMPLEMENTATIO 宏在类文件定义绑定到数据库表的类WCDB_IMPLEMENTATION(Message)// 使用 WCDB_SYNTHESIZE 宏在类文件定义需要绑定到数据库表的字段WCDB_SYNTHESIZE(Message, messageId)WCDB_SYNTHESIZE(Message, title)WCDB_SYNTHESIZE(Message, createTime)WCDB_SYNTHESIZE(Message, content)WCDB_SYNTHESIZE(Message, count)// 用于定义主键WCDB_PRIMARY(Message, messageId)@end
将一个已有的ObjC类进行ORM绑定的过程如下:
- 定义该类遵循
WCTTableCoding
协议。可以在类声明上定义,也可以通过文件模版在category内定义。 - 使用
WCDB_PROPERTY
宏在头文件声明需要绑定到数据库表的字段。 - 使用
WCDB_IMPLEMENTATIO
宏在类文件定义绑定到数据库表的类。 - 使用
WCDB_SYNTHESIZE
宏在类文件定义需要绑定到数据库表的字段。
简单几行代码,就完成了将类和需要的字段绑定到数据库表的过程。这三个宏在名称和使用习惯上,也都和定义一个ObjC类相似,以此便于记忆。
除此之外,WCDB还提供了许多可选的宏,用于定义数据库索引、约束等,如:
WCDB_PRIMARY
用于定义主键WCDB_INDEX
用于定义索引WCDB_UNIQUE
用于定义唯一约束WCDB_NOT_NULL
用于定义非空约束- ...
更多关于ORM定义,请参考:ORM使用教程
二.增删改查(CRUD)
得益于ORM的定义,WCDB可以直接进行通过object进行增删改查(CRUD)操作。开发者可以通过WCTDatabase
和WCTTable
两个类进行一般的增删改查操作。
1.首先创建一个WCTDatabase
//获得存放数据库文件的沙盒地址+ (NSString *)wcdbFilePath{ NSArray *filePath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentPath = [filePath objectAtIndex:0]; NSString *dbFilePath = [documentPath stringByAppendingPathComponent:@"message.db"]; return dbFilePath;}//1.创建数据库的操作+ (BOOL)creatDatabase{ database = [[WCTDatabase alloc] initWithPath:[self wcdbFilePath]]; if (![database isTableExists:TABLE_WCDB_NAME]) { BOOL result = [database createTableAndIndexesOfName:TABLE_WCDB_NAME withClass:Message.class]; return result; } return YES;}
2.增
#pragma mark - 增+ (BOOL)insertData:(Message *)message{ if (message == nil) { return NO; } if (database == nil) { [self creatDatabase]; } BOOL result = [database insertObject:message into:TABLE_WCDB_NAME]; return result;}+ (BOOL)insertDatas:(NSArray<Message *> *)messages{ if (database == nil) { [self creatDatabase]; } BOOL result = [database insertObjects:messages into:TABLE_WCDB_NAME]; return YES;}
3.删
#pragma mark - 删+ (BOOL)deleteDataWithId:(NSInteger)messageId{ if (database == nil) { [self creatDatabase]; } BOOL result = [database deleteObjectsFromTable:TABLE_WCDB_NAME where:Message.messageId == messageId]; return result;}+ (BOOL)deleteAllData{ if (database == nil) { [self creatDatabase]; } BOOL result = [database deleteAllObjectsFromTable:TABLE_WCDB_NAME]; return result;}
4.改
#pragma mark - 改+ (BOOL)updateData:(NSString *)content byId:(NSInteger)messageId{ if (database == nil) { [self creatDatabase]; } Message *message = [[Message alloc] init]; message.content = content; BOOL result = [database updateRowsInTable:TABLE_WCDB_NAME onProperties:Message.content withObject:message where:Message.messageId == messageId]; return result;}+ (BOOL)updateData:(Message *)message{ if (database == nil) { [self creatDatabase]; } BOOL result = [database updateRowsInTable:TABLE_WCDB_NAME onProperties:Message.content withObject:message where:Message.messageId == message.messageId]; [database updateRowsInTable:TABLE_WCDB_NAME onProperties:Message.createTime withObject:message where:Message.messageId == message.messageId]; [database updateRowsInTable:TABLE_WCDB_NAME onProperties:Message.title withObject:message where:Message.messageId == message.messageId]; return result;}
5.查
#pragma mark - 查+ (NSArray<Message *> *)getAllData{ if (database == nil) { [self creatDatabase]; } return [database getAllObjectsOfClass:Message.class fromTable:TABLE_WCDB_NAME];}+ (NSArray<Message *> *)getData:(NSInteger)messageId{ if (database == nil) { [self creatDatabase]; } return [database getObjectsOfClass:Message.class fromTable:TABLE_WCDB_NAME where:Message.messageId == messageId];}
阅读全文
0 0
- iOS开发 数据存储之WCDB的使用
- iOS开发 数据存储之WCDB的介绍
- iOS数据库框架 WCDB的使用详解
- iOS开发之数据存储
- iOS小明开发笔记(一) (数据存储篇之sqlite3的基本使用)
- ios开发之数据的持久化存储机制
- ios开发之数据的持久化存储机制
- ios开发之数据的持久化存储机制
- ios开发之数据的持久化存储机制
- ios开发之数据的持久化存储机制
- ios开发之数据的持久化存储机制
- ios开发之数据的持久化存储机制
- ios开发之数据的持久化存储机制
- IOS开发:NSUserDefaults的使用(轻量级本地数据存储)
- iOS开发之数据存储方案
- iOS 开发数据存储之magic record
- 【iOS-Android开发对比】之 数据存储
- 13、iOS开发之数据存储
- 三分线
- 文字无缝滚动
- IDA6.8 脚本学习:
- 小米2015笔试编程题
- OpenCV单窗口显示多幅图像的代码
- iOS开发 数据存储之WCDB的使用
- Golang range channel、close channel 遍历和关闭
- 插入排序
- 1、Spring技术栈-博客系统基础架构
- UDEV规则参数详细解释使用
- phpstorm安装及xdebug断点调试
- bootstrap 后台管理系统工作界面布局方式
- 测试流程
- 恶搞鼠标追不上QQ