发布时间:2026/7/13 1:45:30
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/7/13 1:45:30

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

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

2026/7/13 1:40:30

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

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

2026/7/13 1:40:30

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

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

2026/7/13 4:45:39

5分钟搞定Android Studio中文界面:新手必备的完整汉化指南

5分钟搞定Android Studio中文界面:新手必备的完整汉化指南 【免费下载链接】AndroidStudioChineseLanguagePack AndroidStudio中文插件(官方修改版本) 项目地址: https://gitcode.com/gh_mirrors/an/AndroidStudioChineseLanguagePack 你是否曾经…

2026/7/13 4:45:39

15分钟解锁Switch无限可能:Atmosphere稳定版终极指南

15分钟解锁Switch无限可能:Atmosphere稳定版终极指南 【免费下载链接】Atmosphere-stable 大气层整合包系统稳定版 项目地址: https://gitcode.com/gh_mirrors/at/Atmosphere-stable 还在为Switch功能受限而烦恼吗?大气层Atmosphere稳定版为你开启…

2026/7/13 4:45:39

深蓝词库转换完整指南:5分钟学会跨平台词库同步

深蓝词库转换完整指南:5分钟学会跨平台词库同步 【免费下载链接】imewlconverter ”深蓝词库转换“ 一款开源免费的输入法词库转换程序 项目地址: https://gitcode.com/gh_mirrors/im/imewlconverter 还在为不同输入法之间的词库格式不兼容而烦恼吗&#xff…

2026/7/12 0:01:29

3步解锁音乐自由:ncmdumpGUI终极NCM文件解密转换指南

3步解锁音乐自由:ncmdumpGUI终极NCM文件解密转换指南 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换,Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 你是否曾在网易云音乐下载了心爱的歌曲&#…

2026/7/12 0:01:29

CANoe 19 SP3 配置 GB/T 27930-2023 A类系统:3步搭建BMS仿真测试环境

CANoe 19 SP3 配置 GB/T 27930-2023 A类系统:3步搭建BMS仿真测试环境随着新能源汽车行业的快速发展,充电通信协议的标准化和测试验证变得尤为重要。GB/T 27930-2023作为中国智能充电协议的最新版本,对充电机与电动汽车之间的通信提出了更严格…

2026/7/12 0:01:29

3步搞定RTL8852BE驱动:从零开始配置Wi-Fi 6网卡

3步搞定RTL8852BE驱动:从零开始配置Wi-Fi 6网卡 【免费下载链接】rtl8852be Realtek Linux WLAN Driver for RTL8852BE 项目地址: https://gitcode.com/gh_mirrors/rt/rtl8852be 还在为Linux系统无法识别RTL8852BE Wi-Fi 6网卡而烦恼吗?&#x1f…

2026/7/13 0:00:24

广氟 PTFE 高速线缆膜 —— 高端线缆绝缘材料新选择

PTFE高速线缆膜的基本概念与特点 PTFE 高速线缆膜是以聚四氟乙烯树脂为原料,经膨化双向拉伸制成的多孔绝缘薄膜,作为高速高频通信线缆的核心介质材料,内部形成均匀连通的微孔结构,兼具极低介电常数与介电损耗,能有效降…

2026/7/12 11:21:32

3个高效策略:快速掌握Axure中文界面配置

3个高效策略:快速掌握Axure中文界面配置 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 还在为Axure RP的英文界面感…