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

发布时间:2026/10/30 23:42:27

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更轻。选对存储方式比会写代码更重要。
延伸阅读

更多相关文章

2026/10/31 17:38:28

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

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

2026/10/25 0:12:01

PIC18F47K40与MCP3202实现锂电池电压均衡方案

1. 项目背景与核心需求在锂离子电池组应用中,电压不平衡问题就像一群跑步运动员中有人掉队一样令人头疼。当多个电池串联工作时,由于制造工艺差异、温度分布不均或老化程度不同,各单体电池的充电状态会出现明显偏差。这种不平衡如果不及时纠正…

2026/10/27 15:23:21

TongWeb7生产环境安全加固实战:从验证码到三员分立

1. 项目概述:为什么生产环境下的TongWeb7必须做安全加固?最近在帮一个金融客户做中间件迁移和上生产前的安全合规检查,项目核心就是把应用从旧版本的WebLogic迁移到国产的TongWeb7上。客户的安全团队提了一堆要求,从最基础的控制台…

2026/10/31 17:34:36

理想MindVLA-o1全栈技术深度解析|全网独家复现3D ViT+MoE混合专家架构、强化多模态时空推理与动力学轨迹生成、助力城市NOA/高速NOA端到端决策泛化与极限场景博弈有效涨点

目录 一、端到端NOA量产核心瓶颈:传统智驾架构的固有性能天花板 二、MindVLA-o1核心定位与全栈技术迭代优势 三、MindVLA-o1全栈架构深度拆解(3D ViT+MoE核心模块) 3.1 多模态统一输入层:全维度场景信息对齐 3.2 3D ViT时空感知编码层:原生三维场景建模 3.3 MoE混合…

2026/10/31 17:29:36

(最新)基于Springboot智慧社区物业管理系统【附源码+文档】

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

2026/10/31 17:29:36

(最新)基于Springboot社区助老志愿管理系统【附源码+文档】

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

2026/10/31 17:29:36

(最新)基于Springboot大学生在线学习平台【附源码+文档】

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

2026/10/30 20:55:10

全国计算机二级C语言真题PDF高效刷题指南

简介:这份PDF是全国计算机二级C语言考试的试题与答案解析,专为备考二级C语言的考生准备。内容涵盖C语言特点与设计理念、程序基本组成单位、main函数执行流程、函数嵌套调用规则、标识符命名规范、整型实型字符型数据类型、八进制十六进制数合法形式、运…

2026/10/30 20:55:10

requests+BeautifulSoup:爬虫抓取h1标题的入门实战指南

简介:一份以实战为导向的Python爬虫入门资源,面向具备基本编程基础、希望快速掌握网络数据抓取的初学者,可解决从零编写简单爬虫的常见困惑。实例以requests库发送HTTP请求、BeautifulSoup解析HTML文档,完整演示从网页中提取 标题…

2026/10/30 20:55:09

递推最小二乘参数辨识MATLAB编程:二阶系统与渐消记忆实现

简介:这是一篇面向控制系统、信号处理与机器学习等领域学习者的最小二乘参数辨识程序说明文档。资源共包含一个docx格式文档,压缩包大小七十八KB,内容围绕递推最小二乘算法和渐消记忆最小二乘算法展开:先构造一个极点位于单位圆内…

2026/10/31 0:02:41

猫狗目标检测数据集:VOC/COCO/YOLO三格式一体化实战包

简介:本资源是一套面向计算机视觉初学者与YOLO目标检测实践者的猫狗图像数据集及配套开发工具包,专为快速上手目标检测模型训练而设计。资源包含1000张真实场景高清猫狗图片,标注质量高,同时提供VOC(XML)、…

2026/10/31 0:02:41

HDU2017多校标程复现:算法竞赛工程化真题沙盒

简介:本资源为2017年HDU多校联合训练第一场官方配套资料,面向ACM程序设计竞赛备赛学生、算法爱好者及高校编程集训队成员,旨在提供权威解题参考与完整测试验证环境。压缩包共40个文件,含15份C标程(覆盖全部赛题&#x…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑