HarmonyOS7 数据持久化 relationalStore:数据库实战

发布时间:2026/9/23 5:36:43

HarmonyOS7 数据持久化 relationalStore:数据库实战
文章目录前言第一步建库第二步建表代码实现第三步增插入核心代码第四步查查询第五步改和删常见误区小白必踩完整可运行示例relationalStore 建表与增查完整示例写在最后前言有些数据不能丢用户的笔记、离线缓存的订单、本地的聊天记录。这些得存进本地数据库关掉 app 再打开还在。HarmonyOS 提供了relationalStore关系型数据库底层就是 SQLite。这篇文章我用一个待办事项的小例子把建库、建表、增删改查完整走一遍。跟着敲你就能上手本地数据库。第一步建库import{relationalStore}fromkit.ArkDataimport{BusinessError}fromkit.BasicServicesKitletdb:relationalStore.RdbStoreasyncfunctioninitDB(){constcfg:relationalStore.StoreConfig{name:todo.db,// 数据库文件名securityLevel:relationalStore.SecurityLevel.S1}dbawaitrelationalStore.getRdbStore(getContext(),cfg)}讲解getRdbStore是异步的拿到一个RdbStore实例就是你的数据库连接。securityLevel是安全等级普通本地数据用S1足够涉及隐私的用更高等级。记得await建库是耗时的。第二步建表表结构用 SQL 语句定义。建议在initDB之后执行一次建表代码实现awaitdb.executeSql(CREATE TABLE IF NOT EXISTS todo ( id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT NOT NULL, done INTEGER DEFAULT 0, createTime TEXT ))IF NOT EXISTS保证重复调用不会报错app 第二次启动表已存在。done INTEGERSQLite 没有布尔用 0/1 表示未完成/完成。字段类型TEXT/INTEGER是标准 SQL写过别的数据库的一看就懂。第三步增插入用ValuesBucket装一行数据再insert核心代码import{ValuesBucket}fromkit.ArkDataasyncfunctionaddTodo(title:string){constvalue:ValuesBucket{title:title,done:0,createTime:newDate().toISOString()}awaitdb.insert(todo,value)}ValuesBucket本质是个键值对对象键对应表里字段名。插入后自增id自动生成。第四步查查询asyncfunctiongetAll():PromiseTodo[]{constpredicatesnewrelationalStore.RdbPredicates(todo)predicates.orderByDesc(createTime)// 按时间倒序constresultawaitdb.query(predicates,[id,title,done])// result 是 ResultSet需要手动转成数组constlist:Todo[][]while(result.goToNextRow()){list.push({id:result.getLong(result.getColumnIndex(id)),title:result.getString(result.getColumnIndex(title)),done:result.getLong(result.getColumnIndex(done))1})}result.close()returnlist}要点RdbPredicates是查询条件构造器orderByDesc排序。query返回的是ResultSet游标要用goToNextRow()getXXX()一行行取最后close()释放。转成普通数组后UI 才好用ForEach渲染。第五步改和删asyncfunctiontoggle(id:number,done:boolean){constvalue:ValuesBucket{done:done?1:0}constpnewrelationalStore.RdbPredicates(todo)p.equalTo(id,id)awaitdb.update(value,p)// 按条件更新}asyncfunctionremove(id:number){constpnewrelationalStore.RdbPredicates(todo)p.equalTo(id,id)awaitdb.delete(p)// 按条件删除}改和删都用RdbPredicates指定哪一行equalTo(id, id)。更新时只放要改的字段其余不动。常见误区小白必踩误区说明建表漏IF NOT EXISTSapp 第二次启动表已存在再CREATE直接报错。务必加上。ResultSet 不close()查询返回的游标占资源用完必须close()否则泄漏。忘了主键自增没设AUTOINCREMENT插入重复 id 会冲突。需要唯一标识就用自增主键。下面这段代码可以直接复制到 DevEco Studio 里运行。建议你边读边敲改一改文末「动手改一改」里的参数亲眼看看效果。完整可运行示例relationalStore 建表与增查演示本地关系型数据库的最小闭环建表、插入、查询。完整示例// 关系型数据库建表 插入 查询import{relationalStore}fromkit.ArkDataconstSQL_CREATECREATE TABLE IF NOT EXISTS user ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, age INTEGER )asyncfunctiondemo(db:relationalStore.RdbStore){awaitdb.executeSql(SQL_CREATE)// 建表幂等awaitdb.insert(user,{name:小明,age:18})// 插入一行constrsawaitdb.query(user,[name,age])// 查询while(rs.goToNextRow()){console.info(namers.getString(0) agers.getLong(1))}rs.close()}你会看到什么运行后 Log 里打印出name小明 age18。表已持久化下次启动应用数据还在。动手改一改把age: 18改成age: 20再查一次验证已落库。用db.delete(user, ...)实现按条件删除。给查询加WHERE age 16的 predicates做条件过滤。写在最后relationalStore看着 API 多其实就五个动作建库、建表、增、查、改删。它和普通 SQLite 一模一样会 SQL 就会这个。适合存结构固定、要查询排序的数据。如果只是存一个用户名、一个开关用不着上数据库——下一篇讲的Preferences更轻。选对存储方式比会写代码更重要。

相关新闻

影刀RPA 图片批量压缩与格式转换:处理大量素材

影刀RPA 图片批量压缩与格式转换:处理大量素材

2026/8/22 21:17:32

title: “影刀RPA 图片批量压缩与格式转换:处理大量素材” date: 2026-07-01 author: 林焱 影刀RPA 图片批量压缩与格式转换:处理大量素材 电商运营有几百张产品图,需要统一压缩到500KB以内、统一转成JPEG、统一加水印、统一改尺寸……这类批…

NestOS与openEuler社区:深度探索云底座操作系统的协作开发模式

NestOS与openEuler社区:深度探索云底座操作系统的协作开发模式

2026/9/9 3:43:40

NestOS与openEuler社区:深度探索云底座操作系统的协作开发模式 【免费下载链接】nestos-website nestos-website is the source code repository for the NestOS website 项目地址: https://gitcode.com/openeuler/nestos-website 前往项目官网免费下载&…

BiSheng-Autotuner社区贡献指南:如何参与开源项目开发

BiSheng-Autotuner社区贡献指南:如何参与开源项目开发

2026/8/23 0:28:41

BiSheng-Autotuner社区贡献指南:如何参与开源项目开发 【免费下载链接】BiSheng-Autotuner BiSheng-Autotuner is a automate tuning command line tool for LLVM. 项目地址: https://gitcode.com/openeuler/BiSheng-Autotuner 前往项目官网免费下载&#xf…

CANN/GE ACL数据集缓冲区添加函数

CANN/GE ACL数据集缓冲区添加函数

2026/9/21 18:38:46

aclmdlAddDatasetBuffer 【免费下载链接】ge GE(Graph Engine)是面向昇腾的图编译器和执行器,提供了计算图优化、多流并行、内存复用和模型下沉等技术手段,加速模型执行效率,减少模型内存占用。 GE 提供对 PyTorch、Te…

用ffmpeg高效批量调整图片尺寸的实战指南

用ffmpeg高效批量调整图片尺寸的实战指南

2026/9/21 18:41:09

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱

2026/9/21 18:36:40

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱 【免费下载链接】transformers 🤗 Transformers: the model-definition framework for state-of-the-art machine learning models in text, vision, audio, and mu…

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南

2026/9/21 18:37:26

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南 【免费下载链接】rustfs 🚀2.3x faster than MinIO for 4KB object payloads. RustFS is an open-source, S3-compatible high-performance object storage system sup…

Java Integer缓存揭秘:128陷阱原理、避坑与面试全解

Java Integer缓存揭秘:128陷阱原理、避坑与面试全解

2026/9/21 18:40:29

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据

2026/9/21 18:36:17

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据 【免费下载链接】rustfs 🚀2.3x faster than MinIO for 4KB object payloads. RustFS is an open-source, S3-compatible high-performance object storage system supporting mi…

远程协作的工作台整理

远程协作的工作台整理

2026/9/22 0:19:28

远程协作的工作台整理远程协作的核心不是再加一个工具,而是让交接信息足够完整。异步任务要写明目标、输入位置、完成标准和需要决策的人。 工作台的最小配置 将日程、待办、代码和沟通入口收拢到少数固定位置;通知按紧急程度分层。工作台不需要模仿办公…

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

2026/9/21 23:38:13

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

2026/9/22 0:48:53

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…