iOS开发通过微信学习WCDB(一)

article/2025/10/9 11:15:14

  最近通过对微信ipa包解压发现微信有使用WCDB这个开源库,搜索了一下了解到WCDB(WeChat Database)是一个高效、完整、易用的移动数据库框架,基于SQLCipher,支持iOS, macOS和Android。经过分析对比,个人感觉WCDB的优势还是比较突出的。下面我就从几个方面对FMDB,Realm,WCDB,CoreData进行比较分析。由于本人从事iOS开发,对于android方面认识不足,如果有哪些地方认识不到位,还请大家多多批评指正。
###各个框架的比较

框架跨平台易操作性缺点
WCDB支持iOS、macOS、Android等平台swift语言下还不太稳定
FMDB目前仅支持iOS平台需要输入完整的sql语句进行操作,不支持以对象的形式进行存储操作
Realm支持iOS和androd平台字符长度有限制,并且仅支持基础类型的数据和数组类型和iOS的数组类型不兼容
CoreData仅支持iOS平台学习成本高,应用不够广泛

###各个框架的使用教程
  其中关于Realm的相关的文章可以参考《Realm数据库 从入门到“放弃”
》,关于FMDB的使用的文章大家可以参考《FMDB的使用方法(附Demo)》,关于CoreData的使用大家可以参考《CoreData 从入门到精通 (一) 数据模型 + CoreData 栈的创建
》。具体的使用方法,大家可以细细品味啊。
###WCDB使用教程
  接下来和大家分享下WCDB的使用,使用步骤如下:
####1)首先需要去github上下载或者克隆,网址如下:https://github.com/Tencent/wcdb
####2)安装文件模版,cd path-to-your-wcdb-dir/tools/templates跳转到这个目录下,然后执行sh install.sh安装完成后,重启Xcode,选择新建文件,即可看到对应的文件模版
这里写图片描述

####3)在您的Podfile中,添加pod 'WCDB’导入到项目中去。
一切准备就绪开始使用了,但是还有一个地方需要特别注意:由于WCDB是一个Objective-C ++框架,对于包含WCDB的项目中的文件,您应该将其扩展名重命名.m为.mm
####4)使用文件模版创建Message对象
创建后的文件如下所示:
这里写图片描述
Message.h文件内容如下:

#import <Foundation/Foundation.h>@interface Message : NSObject@property(nonatomic, assign) NSInteger localID;
@property(nonatomic, copy) NSString *content;
@property(nonatomic, strong) NSDate *createTime;
@property(nonatomic, strong) NSDate *modifiedTime;@end

Message.mm文件内容如下:

#import "Message+WCTTableCoding.h"
#import "Message.h"
#import <WCDB/WCDB.h>@implementation MessageWCDB_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文件内容如下:

@interface Message (WCTTableCoding) <WCTTableCoding>WCDB_PROPERTY(localID)
WCDB_PROPERTY(content)
WCDB_PROPERTY(createTime)
WCDB_PROPERTY(modifiedTime)@end

####5)开始使用WCDB进行数据库操作

创建sqlite数据库,代码如下:
- (WCTDatabase *)createDataBase{NSString *docDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];NSString *path = [NSString stringWithFormat:@"%@/testDB",docDir];//注意,此处数据库名字不要带sqlite的后缀名,恢复数据库的时候如果有这个后缀名,会造成无法恢复的情况。这是一个坑啊,大家千万要注意NSLog(@"DB Path %@",path);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];if (result) {return database;}return nil;
}

######往数据库中插入数据,代码如下:

- (void)inserDataToDB{self.count++;//插入Message *message = [[Message alloc] init];message.localID = self.count;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 = [self.database insertObject:message into:@"message"];
}

######从数据库中删除数据,代码如下:

- (void)deleteDataToDB{BOOL result = [self.database deleteObjectsFromTable:@"message"where:Message.localID > 0];
}

######更新数据库中的信息,代码如下:

- (void)updateDataToDB{Message *message = [[Message alloc] init];message.content = @"Hi jack!";BOOL result = [self.database updateAllRowsInTable:@"message"
onProperties:Message.contentwithObject:message];
}

######查询数据库中的信息,代码如下:

- (void)searchDataFromData{//查询//SELECT * FROM message ORDER BY localIDNSArray<Message *> *message = [self.database getObjectsOfClass:Message.classfromTable:@"message"orderBy:Message.localID.order()];//第二种查询方法
//    WCTTable *table = [self.database getTableOfName:@"message"
//                                     withClass:Message.class];
//    //查询
//    //SELECT * FROM message ORDER BY localID
//    NSArray<Message *> *message = [table getObjectsOrderBy:Message.localID.order()];}- (void)getOneObject{Message *message = [self.database getOneObjectOfClass:Message.class fromTable:@"message"];//查询的是第一条数据NSLog(@"message.localID %@",@(message.localID));}

######加密数据库,代码如下:

- (void)encryptDBData{NSData *password = [@"MyPassword" dataUsingEncoding:NSASCIIStringEncoding];[self.database setCipherKey:password];
}

注:加密数据库这段代码自己尝试了,并验证了,发现没效果,不知道是不是自己的使用方法不对造成的,后续会持续关注这个问题。

其中demo下载地址如下:https://github.com/xindizhiyin2014/WCDBDemo

更多优质文章,可以微信扫码关注:
这里写图片描述
wcdb官方文档


http://chatgpt.dhexx.cn/article/dYlWcG1f.shtml

相关文章

微信移动端数据库组件 WCDB 系列(三) — 解析 WINQ 原理

背景 高效、完整、易用是 WCDB 的基本原则。前几篇文章分享了 WCDB 的基本用法和修复工具&#xff0c;接下来将更深入地聊聊 WCDB 在易用性上的思考和实践。 对于各类客户端数据库&#xff0c;似乎都绕不开拼接字符串这一步。即便在 Realm 这样的 NoSQL 的数据库中&#xff0…

WCDB源码解析

源文链接&#xff1a;http://xiangwangfeng.com/2018/01/08/WCDB-源码解析 起因 最近开了个新项目&#xff0c;项目的主程童鞋引入了 WCDB 代替原先自制的 KeyValueStore 和 FMDB。问为何&#xff0c;答曰&#xff1a;好用&#xff0c;线程安全又高效。又问具体实现细节&#x…

IOS数据存储 之WCDB (二)WCDB.swift使用篇

IOS数据存储 之WCDB &#xff08;二&#xff09;WCDB.swift使用篇 1.WCDB.Swfit基础使用1.1 WCDB.Swfit 简介1.1.1 模型绑定1.1.2 创建数据库与表1.1.3 操作数据1.1.3.1 插入操作1.1.3.2 查找操作1.1.3.3 更新操作1.1.3.4 删除操作 1.2. 模型绑定1.2.1 Swift 模型绑定1.2.2 字段…

Android使用WCDB+Room 总结

最近项目有需要用到wcdb数据库&#xff0c;并且保证和IOS互通数据&#xff0c;在网上找很多相关资料&#xff0c;最后还是靠自己一点点摸索成功&#xff0c;现在做个总结。 一、在gradle 里加上 WCDB 相关的 room 组件 def room_version "2.3.0"// wcdb数据库和roo…

IOS数据存储 之WCDB (一)

IOS数据存储 之WCDB &#xff08;一&#xff09; 1. WCDB 简介1.1 使用WCDB框架3大优势1.2 WCDB 的一些基础概念1.2.1 类字段绑定&#xff08;ORM&#xff09;1.2.2 WINQ&#xff08;WCDB语言集成查询&#xff09;1.2.2.1 字段映射与运算符1.2.2.2 字段组合1.2.2.3 AllProperti…

iOS开发 数据存储之WCDB的介绍

一.介绍 WCDB是一个高效、完整、易用的移动数据库框架,基于SQLCipher,支持iOS,macOS和Android 二.基本特性 易用,WCDB支持一句代码即可将数据取出并组合为object WINQ(WCDB语言集成查询):通过WINQ,开发者无须为了拼接SQL的字符串而写一大坨胶水代码ORM(Object Relational Ma…

开源微信小程序自助建站系统源码 含精美的多行业模板和搭建教程

分享一个微信小程序自助建站系统源码&#xff0c;含各行各业的小程序模板和搭建教程&#xff0c;可一键切换模板&#xff0c;自由DIY&#xff0c;搭建属于你自己的小程序。 特色功能一览&#xff1a; 11、支持创建多个小程序&#xff01;&#xff08;没有数量限制&#xff0c;后…

强大易用的开源建站工具Halo

最近无意间看到别人的博客外观非常美观&#xff0c;便萌生了偷师学艺的想法…所以就看到看了Halo这个开源的建站项目,其实使用起来非常简单&#xff0c;但是想要做一个类似的开源建站工具&#xff0c;谈何容易 访问官网 https://halo.run/ 使用docker部署 搜索镜像halo do…

14个免费好用的建站工具

有时候&#xff0c;我们想建立一个独立网站的时候&#xff0c;苦于自己技能不够&#xff0c;而迟迟没有行动&#xff0c;其实&#xff0c;我们真正的去构建一个独立网站的时候&#xff0c;我们并不需要多复杂的技术。我们也不一定要成为非常专业的程序员&#xff0c;因为现在&a…

推荐一款免费开源的建站系统 - AnqiCMS

安企内容管理系统(AnqiCMS)&#xff0c;是一款使用 GoLang 开发的企业站内容管理系统&#xff0c;它部署简单&#xff0c;软件安全&#xff0c;界面优雅&#xff0c;小巧&#xff0c;执行速度飞快&#xff0c;使用 AnqiCMS 搭建的网站可以防止众多安全问题发生。AnqiCMS 的设计…

介绍一款开源、高性价比的在线教育建站系统

今天给大家介绍一款开源在线教育建站系统——edusoho&#xff0c;项目是用PHP开发&#xff0c;所以基本上会搭建php站点就可以完成本次的搭建。 先看看安装之后的登录界面。 去官网下载源码 笔者下载企培开源版&#xff1a;edusoho-ct-21.4.5.zip 系统说明 1.系统&#xff1…

国内好用的五款开源建站系统

推荐5款优秀的开源建站系统,都有免费版本,有需要可以去试试。蝉知 蝉知系统是一款开源的的企业营销自助建站系统。它专为企业营销设计,伪静态网址、关键词、语义化结构,内置流量统计。 蝉知功能全面,文章发布、会员管理、论坛评论、产品展示等,并内置商城系统,商品、订…

免费开源的建站程序大全,不会编程也可以自助搭建网站了哦

想建网站又不会编程的小伙伴有福啦&#xff0c;本期推荐一些开源的cms建站程序&#xff0c;不需要写后端的任何逻辑代码&#xff0c;轻轻松松就可以建立自己的网站了&#xff0c;当然&#xff0c;要想网站有自己的个性&#xff0c;模版还是需要自己写的&#xff0c;只需要会简单…

绝了!小说建站项目完整开源

超棒的开源小说文学建站 CMS 系统&#xff0c;作为面试项目有牌面儿&#xff01; 编程导航开源仓库&#xff1a;https://github.com/liyupi/code-nav 大家好&#xff0c;我是鱼皮&#xff0c;今天给大家推荐一个优秀的开源 Java 全栈项目。 小说精品屋&#xff0c;是一套非常完…

最新首发自助建站系统源码,傻瓜式一键建站系统源码,高度开源支持专业在线自助建站服务平台软件

一佰互联,巅云门户自助建站系统v8建站平台版&#xff0c;历经3年不断打磨终于上线了。专业PS级大师级高端响应式智能建站平台软件&#xff0c;只为网络公司而生&#xff0c;采用国内知名开源php框架,Thinkphp6vue.js前端数据响应系统,实现了在线自助开通网站&#xff0c;企业站…

四大免费开源建站系统

原文&#xff1a;四大免费开源建站系统 - 知乎 第一&#xff1a; WordPress WordPress的主流客户是企业/个人的官网。一家公司不一定会在网上卖东西&#xff0c;但一定会需要一个官网。用WordPress做官网可谓是性价比最优选择。如果没有预算&#xff0c;你可以自己买几十美金的…

有哪些免费好用的开源建站程序/系统,推荐下?

我推荐WordPress建站程序&#xff0c;学习入门门槛很低&#xff0c;全世界近三分之一的网站都是采用wordpress,所以没有理由不去学习它。 我从一名小白变为wordpress建站老手&#xff0c;对比过很多建站程序&#xff0c;还是觉得wordpress能帮我节省时间和精力&#xff0c;让我…

开源自助建站系统源码完整源码+搭建教程 傻瓜式一键建站系统源码

一键傻瓜式自助建站系统源码&#xff0c;目前包含七百多套完整网站模板&#xff0c;全部都是响应式网站模板&#xff0c;傻瓜一键自助建站。开发组合PHPmysql&#xff0c;功能强大。 一键自助建站系统源码带安装教程&#xff0c;源码下载&#xff1a;春哥技术博客获取。自助建站…

五款开源免费的建站系统推荐

最近研究了下开源的建站系统&#xff0c;推荐5款国内的吧&#xff0c;都有免费版本&#xff0c;有需要可以去试试。 ECTouch ECTouch是一款开源免费的移动商城网店系统。能够帮助企业和个人快速构建手机移动商城并减少二次开发带来的成本。 ECTouch采用PHPMYSQL方式运行&…

Excel如何按照指定顺序排列

需求&#xff1a;要求按照指定的code出相应的value值&#xff0c;后台可能查出来的code对应的值无法与给定的顺序匹配上&#xff0c;当然可以用代码解决&#xff0c;但是如果想偷懒可以直接用Excel强大的自定义排序解决。 Step1&#xff1a;在Excel中自定义排序&#xff1a;点击…