关于WCDB Swift 的一些简易使用

article/2025/10/9 9:50:33

wcdb 开源地址:https://github.com/Tencent/wcdb

一、wcdb介绍

引用官方说法:“WCDB Swift 是一个易用、高效、完整的移动数据库框架,它基于 SQLite 和 SQLCipher 开发。”

鹅厂出品的值得信赖。于是就打算在新的项目中使用它。

三大特性让我们去选择它:

① 易用性

one line of code 是它坚持的原则,大多数操作只需要一行代码即可完成,是不是很赞。

使用WINQ 语句查询,不用为拼接SQL语句而烦恼了,模型绑定映射也是按照规定模板去实现方便快捷。

② 高效性

就拿和fmdb做对比吧:

image

③ 完整性

1、支持基于SQLCipher 加密

2、持全文搜索

3、支持反注入,可以避免第三方从输入框注入 SQL,进行预期之外的恶意操作。

4、用户不用手动管理数据库字段版本,升级方便自动

5、提供数据库修复工具

二、wcdb 安装

可以直接看官方安装教程:https://github.com/Tencent/wcdb/wiki/Swift-%E5%AE%89%E8%A3%85%E4%B8%8E%E5%85%BC%E5%AE%B9%E6%80%A7

这里就不过多说明了

三、wcdb 的封装使用

1、模型绑定,直接用wcdb提供的模板

class Sample: TableCodable {var identifier: Int? = nilvar description: String? = nilenum CodingKeys: String, CodingTableKey {typealias Root = Samplestatic let objectRelationalMapping = TableBinding(CodingKeys.self)case identifiercase description}
}

2、数据库创建以及操作单独写了个单例类 HMDataBaseManager.swift

import Foundation
import WCDBSwiftstruct HMDataBasePath {let dbPath = NSSearchPathForDirectoriesInDomains(.documentDirectory,.userDomainMask,true).last! + "/HMDB/HMDB.db"
}class HMDataBaseManager: NSObject {static let share = HMDataBaseManager()let dataBasePath = URL(fileURLWithPath: HMDataBasePath().dbPath)var dataBase: Database?private override init() {super.init()dataBase = createDb()}///创建dbprivate func createDb() -> Database {debugPrint("数据库路径==\(dataBasePath.absoluteString)")return Database(withFileURL: dataBasePath)}///创建表func createTable<T: TableDecodable>(table: String, of ttype:T.Type) -> Void {do {try dataBase?.create(table: table, of:ttype)} catch let error {debugPrint("create table error \(error.localizedDescription)")}}///插入func insertToDb<T: TableEncodable>(objects: [T] ,intoTable table: String) -> Void {do {try dataBase?.insert(objects: objects, intoTable: table)} catch let error {debugPrint(" insert obj error \(error.localizedDescription)")}}///修改func updateToDb<T: TableEncodable>(table: String, on propertys:[PropertyConvertible],with object:T,where condition: Condition? = nil) -> Void{do {try dataBase?.update(table: table, on: propertys, with: object,where: condition)} catch let error {debugPrint(" update obj error \(error.localizedDescription)")}}///删除func deleteFromDb(fromTable: String, where condition: Condition? = nil) -> Void {do {try dataBase?.delete(fromTable: fromTable, where:condition)} catch let error {debugPrint("delete error \(error.localizedDescription)")}}///查询func qureyFromDb<T: TableDecodable>(fromTable: String, cls cName: T.Type, where condition: Condition? = nil, orderBy orderList:[OrderBy]? = nil) -> [T]? {do {let allObjects: [T] = try (dataBase?.getObjects(fromTable: fromTable, where:condition, orderBy:orderList))!debugPrint("\(allObjects)");return allObjects} catch let error {debugPrint("no data find \(error.localizedDescription)")}return nil}///删除数据表func dropTable(table: String) -> Void {do {try dataBase?.drop(table: table)} catch let error {debugPrint("drop table error \(error)")}}/// 删除所有与该数据库相关的文件func removeDbFile() -> Void {do {try dataBase?.close(onClosed: {try dataBase?.removeFiles()})} catch let error {debugPrint("not close db \(error)")}}}

以上的基本满足使用需求。
比较复杂的查询可以使用 prepareSelect 查询接口

 ///查询所有站点并按字母排序去重func qureyAllStations(cityId: Int) -> [StationModel]{var stationArray = [StationModel]()do {let selectPrep = try HMDataBaseManager.share.dataBase?.prepareSelect(on: StationModel.Properties.all, fromTable: String(describing: StationModel.self)).where(StationModel.Properties.cityid == cityId).group(by: StationModel.Properties.statid).order(by: StationModel.Properties.statpname.asOrder(by: .ascending))stationArray = try selectPrep?.allObjects() ?? []} catch let error {debugPrint("\(error)")}return stationArray}

这里是新项目中最复杂的一个查询了,查询指定城市所有站点,并且去重。

四、最后

要写些复杂的查询语句可以去wiki文档和官方demo的testcase里面查阅,我之前赶项目,没有仔细查找,后面是询问了作者才找到需要的内容。目前只是用了皮毛,在项目后续的使用中继续学习。


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

相关文章

微信 WCDB 正式开源——高效易用的移动数据库框架

前沿介绍 腾讯开源微信数据库框架WCDB,他是一个高效、完整、易用的移动数据库框架&#xff0c;基于SQLCipher&#xff0c;支持iOS, macOS和Android。 便捷地定义表、索引、约束&#xff0c;并进行增删改查操作 项目演示效果如下&#xff1a; 微信 即时通讯软件 微信&#x…

Wcdb android 目录,WCDB漫谈

前言 移动端的数据库选型一直是一个难题&#xff0c;直到前段时间看到了WeMobileDev(微信前端团队)放出了第三个开源组件-WCDB WCDB(WeChat DataBase)是微信官方的移动端数据库组件&#xff0c;致力于提供一个高效、易用、完整的移动端存储方案 微信团队怎么说 基于SQLCipher W…

iOS开发-关于微信WCDB的使用 WCDB嵌套模型的使用

iOS开发-关于微信WCDB的使用 WCDB嵌套模型的使用 前言开发前准备开发关于生成WCDB文件 选择new file即可找到关于嵌套模型的生成 分两步 选择new file即可找到增删改查的封装使用 总结 前言 iOS开发中有需要数据库的存储&#xff0c;表的增删改查等&#xff0c;FMDB和最近流行…

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

通过之前的两篇文章对wcdb能够简单的使用了&#xff0c;这些知识储备多时&#xff0c;最近终于可以派上用场了&#xff0c;最近app有一个通讯录的新功能&#xff0c;实现联系人列表的排序&#xff0c;以及检索&#xff0c;刚好可以用用wcdb去实现。 联系人模型的建立 我首先建…

WCDB使用笔记

本地数据加密 由于项目涉及到一些用户隐私数据的存储&#xff0c;所以需要对保存在客户端本地的数据进行加密&#xff0c;以防止用户隐私数据在设备被root的情况下出现泄漏。目前android的本地数据存储基本分为file&#xff0c;sharepreference和database&#xff0c;所以对数…

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

最近通过对微信ipa包解压发现微信有使用WCDB这个开源库&#xff0c;搜索了一下了解到WCDB&#xff08;WeChat Database&#xff09;是一个高效、完整、易用的移动数据库框架&#xff0c;基于SQLCipher&#xff0c;支持iOS, macOS和Android。经过分析对比&#xff0c;个人感觉WC…

微信移动端数据库组件 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;是一套非常完…