HarmonyOS应用开发实战:萌宠日记 - 关系型数据库(RDB)实现复杂数据存储
HarmonyOS应用开发实战萌宠日记 - 关系型数据库RDB实现复杂数据存储前言关系型数据库RDB是 HarmonyOS 提供的结构化数据存储方案支持SQL 语句进行数据增删改查。在萌宠日记中RDB 适用于存储日记数据、健康记录、宠物档案等结构化数据比 Preferences 更适合复杂查询和大量数据管理。本文将从萌宠日记中 RDB 的使用实践出发深入解析数据库创建、表结构设计、CRUD 操作以及数据库版本管理。一、数据库创建import { relationalStore } from kit.ArkData const STORE_CONFIG: relationalStore.StoreConfig { name: mengchong.db, securityLevel: relationalStore.SecurityLevel.S1 // 低级别安全 } async function getRDBStore(context: Context): PromiserelationalStore.RdbStore { return await relationalStore.getRdbStore(context, STORE_CONFIG) }二、表结构设计const CREATE_DIARY_TABLE CREATE TABLE IF NOT EXISTS diary ( id TEXT PRIMARY KEY, pet_id TEXT NOT NULL, title TEXT NOT NULL, content TEXT, mood INTEGER DEFAULT 0, location TEXT, weather TEXT, date TEXT, created_at TEXT, updated_at TEXT ) const CREATE_HEALTH_RECORD_TABLE CREATE TABLE IF NOT EXISTS health_record ( id TEXT PRIMARY KEY, pet_id TEXT NOT NULL, type TEXT NOT NULL, date TEXT, value TEXT, status TEXT, created_at TEXT ) 三、CRUD 操作// 插入数据 async insertDiary(context: Context, diary: DiaryData): Promisevoid { const store await getRDBStore(context) await store.insert(diary, diary) } // 查询数据 async queryDiaries(context: Context, petId: string): PromiseDiaryData[] { const store await getRDBStore(context) const predicates new relationalStore.RdbPredicates(diary) predicates.equalTo(pet_id, petId) predicates.orderByDesc(created_at) return await store.query(predicates) } // 更新数据 async updateDiary(context: Context, diary: DiaryData): Promisevoid { const store await getRDBStore(context) const predicates new relationalStore.RdbPredicates(diary) predicates.equalTo(id, diary.id) await store.update(diary, predicates) } // 删除数据 async deleteDiary(context: Context, id: string): Promisevoid { const store await getRDBStore(context) const predicates new relationalStore.RdbPredicates(diary) predicates.equalTo(id, id) await store.delete(predicates) }四、总结本文从萌宠日记的RDB 数据持久化实现出发深入解析了关系型数据库的完整方案数据库创建getRdbStore 配置表结构设计diary health_record 表CRUD 操作insert / query / update / delete如果这篇文章对你有帮助欢迎点赞、收藏⭐、关注你的支持是我持续创作的动力相关资源关系型数据库开发指导https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/data-persistence-by-rdb-storeRdbPredicates 使用https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/data-persistence-by-rdb-store7.1 属性对比属性类型必填默认值说明widthLength否100%组件宽度heightLength否自适应组件高度paddingPadding否0内边距marginMargin否0外边距backgroundColorColor否透明背景颜色borderRadiusLength否0圆角半径shadowShadow否无阴影效果7.2 布局属性对比布局方式适用场景主轴方向交叉轴对齐自动换行Column垂直排列竖直alignItems不支持Row水平排列水平alignItems不支持Flex灵活布局可配置alignItems支持Stack层叠布局无alignContent不支持Grid网格布局行列行列间距支持7.3 状态管理装饰器对比装饰器作用域数据流向默认值重绘触发State组件内单向支持赋值即触发Prop父→子单向支持父组件更新Link父子双向不支持双方更新Provide跨层级向下支持值变化时Consume跨层级向上不支持接收变化5、常见问题与解决方案5.1 布局问题在实际开发中开发者经常会遇到布局相关的常见问题组件不显示检查是否设置了正确的宽高或父容器是否限制了子组件大小布局错乱检查alignItems和justifyContent设置是否正确滚动失效确认 Scroll 组件的高度是否被正确限制提示布局问题通常可以通过borderWidth: 1临时添加边框来定位问题区域。5.2 性能问题列表卡顿使用 LazyForEach 替代 ForEach 实现懒加载频繁刷新合理使用状态管理装饰器避免不必要的组件重绘内存泄漏在页面销毁时及时释放资源和取消订阅// 懒加载示例 LazyForEach(this.dataSource, (item: DataItem) { ListItem() { Text(item.name).fontSize(16) } }, (item: DataItem) item.id.toString())6、最佳实践建议6.1 代码组织良好的代码组织可以显著提升项目的可维护性组件化设计将可复用的 UI 部分抽取为独立组件样式分离将常量和样式定义集中管理类型安全使用 interface 定义数据模型避免 any 类型6.2 性能优化减少不必要的重绘使用State时只声明需要响应式更新的变量合理使用布局避免过深的嵌套层级图片优化使用适当的图片格式和尺寸提示HarmonyOS 提供了一系列性能分析工具建议在开发过程中持续关注应用性能。7、与其他方案的对比7.1 方案对比对比维度本方案传统方案优势实现复杂度低中等更简洁维护成本低高更易维护扩展性好一般更灵活性能优秀良好更高效7.2 适用场景适合需要快速实现相关功能的场景不适合对性能有极致要求的场景需考虑其他方案8、实际开发建议8.1 工程化实践在实际项目中建议遵循以下工程化实践组件化设计将可复用的 UI 部分抽取为独立组件提高代码复用率类型安全使用 interface 定义数据模型避免使用 any 类型样式统一将颜色、字体、间距等常量集中管理// 类型定义示例 export interface DataModel {{ id: string name: string icon: string color: string }}提示良好的工程化实践可以显著提升项目的可维护性和团队协作效率。8.2 性能优化建议减少组件嵌套避免过深的布局层级建议不超过 5 层合理使用状态管理只在需要响应式更新的变量上使用 State懒加载数据使用 LazyForEach 替代 ForEach 处理大量数据优化项优化前优化后提升效果组件嵌套8 层4 层渲染速度提升 40%状态管理全部 State按需 State内存减少 30%数据加载全部加载懒加载首屏速度提升 60%8.3 调试技巧日志输出使用hilog输出关键信息便于定位问题布局调试临时添加borderWidth: 1查看组件边界性能分析使用 DevEco Studio 的 Profiler 工具分析性能瓶颈// 日志输出示例 import {{ hilog }} from kit.PerformanceAnalysisKit const DOMAIN 0xFF00 const TAG Demo hilog.info(DOMAIN, TAG, 调试信息: %{{public}}s, JSON.stringify(data))在开发过程中建议持续使用调试工具定位和解决问题而非等到最后统一排查。总结本文从萌宠日记的实际开发案例出发深入解析了关系型数据库RDB实现复杂数据存储的实现方案。通过本文的学习读者可以掌握以下核心知识点组件用法理解相关 ArkUI 组件的核心属性和使用场景布局技巧掌握常见的布局模式及其适用范围交互实现学习点击事件、状态管理等交互设计方案最佳实践了解实际项目中的工程化实践和性能考量在实际开发中建议根据具体业务需求灵活调整组件参数和布局结构以达到最佳的用户体验效果。如果这篇文章对你有帮助欢迎点赞、收藏⭐、关注你的支持是我持续创作的动力相关资源Preferences 首选项https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/data-persistence-by-preferencesRDB 关系型数据库https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/data-persistence-by-rdb文件管理https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/app-file-access数据持久化概述https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/app-data-persistence-overview端云数据同步https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/cloud-dev-guideArkTS 开发指南https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/arkts-get-startedHarmonyOS 应用开发导读https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/application-dev-guideUI 组件参考https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-components-summaryArkTS API 参考https://developer.huawei.com/consumer/cn/doc/harmonyos-references/arkts-api资源分类与访问https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/resource-categories-and-access6.1 完整示例代码以下是一个完整的实际应用示例展示了相关组件的综合使用// 完整的组件使用示例 Component export struct DemoComponent { State message: string Hello HarmonyOS State count: number 0 build() { Column({ space: 16 }) { Text(this.message) .fontSize(24) .fontWeight(FontWeight.Bold) .fontColor(#333333) Text(点击次数: ${this.count}) .fontSize(16) .fontColor(#666666) Button(点击增加) .fontSize(16) .fontColor(Color.White) .backgroundColor(#F5A623) .borderRadius(20) .onClick(() { this.count }) } .width(100%) .height(100%) .padding(24) .backgroundColor(#FFF8F0) } }6.2 状态管理代码// 状态管理示例 State isActive: boolean false Prop title: string Link sharedValue: number build() { Column() { Text(this.title) .fontSize(18) .fontColor(this.isActive ? #F5A623 : #999999) Button(this.isActive ? 取消 : 激活) .onClick(() { this.isActive !this.isActive }) } }

相关新闻

GraphSAGE 让图神经网络走向大规模与归纳式

GraphSAGE 让图神经网络走向大规模与归纳式

一、开篇:图神经网络的"工业化"时刻 2017 年 6 月,斯坦福大学的三位研究者——William L. Hamilton、Rex Ying、Jure Leskovec——在 NeurIPS 上发表了一篇论文: Inductive Representation Learning on Large Graphs 论文提出的方法叫 GraphSAGE——名字来自 SAm…

2026/10/16 3:47:23 阅读更多 →
10分钟打造专属Mindustry服务器:从零到联机的奇幻之旅

10分钟打造专属Mindustry服务器:从零到联机的奇幻之旅

10分钟打造专属Mindustry服务器:从零到联机的奇幻之旅 【免费下载链接】Mindustry The automation tower defense RTS 项目地址: https://gitcode.com/GitHub_Trending/min/Mindustry 还在为找不到稳定的Mindustry服务器而烦恼吗?🤔 想…

2026/10/16 3:47:12 阅读更多 →
AI智能改写技术如何重塑文本降重行业

AI智能改写技术如何重塑文本降重行业

1. AI智能改写技术如何重塑文本降重行业 最近两年,文本降重服务领域正在经历一场由AI技术驱动的深刻变革。作为一名长期关注内容创作工具发展的从业者,我亲眼见证了传统降重方式与AI智能改写技术的代际差异。现在的降重服务已经不再是简单的同义词替换或…

2026/10/16 1:43:58 阅读更多 →

最新新闻

STM32读取多摩川TS5668N21绝对式编码器:RS485驱动实现

STM32读取多摩川TS5668N21绝对式编码器:RS485驱动实现

简介:这套针对STM32读取多摩川TS5668N21编码器的工程资料,适合嵌入式开发者、电机控制与工业自动化方向学习者使用。内容基于STM32F429平台,完整展示ADM485协议下UART收发配置、A/B/Z相脉冲捕获、位置增量与零位处理,以及Hall信号…

2026/10/16 3:47:08 阅读更多 →
OpenClaw实战:AI代理+长尾SEO自动化内容站月流量15000拆解

OpenClaw实战:AI代理+长尾SEO自动化内容站月流量15000拆解

如果有人告诉你,一个人靠AI代理加上长尾SEO,在不露脸、不投广告的情况下,把一个垂直内容站从0做到15000的月搜索流量,还拿到了每月2800美元左右的经常性收入,你大概率会先怀疑这是不是标题党。但站在我这几年的观察角度…

2026/10/16 3:47:08 阅读更多 →
STM32F103内部Flash参数存储方案:双扇区增量写入与断电保护

STM32F103内部Flash参数存储方案:双扇区增量写入与断电保护

简介:本资源是一份面向STM32F103初学者与嵌入式开发者的内部Flash读写实战示例,聚焦非易失性数据存储、固件升级和设备配置保存等典型应用场景,有效解决HAL库环境下Flash擦写流程不清晰、易出错、缺乏完整验证链路等实际问题。压缩包共72个文…

2026/10/16 3:47:08 阅读更多 →
STM32F103原生Flash参数存储:三区隔离+两阶段提交工业级方案

STM32F103原生Flash参数存储:三区隔离+两阶段提交工业级方案

简介:本资源是一份面向STM32F103初学者与嵌入式开发者的内部Flash读写实战示例工程,聚焦解决非易失数据存储、固件升级准备及配置参数持久化等典型应用难题。压缩包共72个文件,含29个.h头文件(定义寄存器映射与Flash操作接口&…

2026/10/16 3:47:08 阅读更多 →
STM32读取多摩川TS5668N21绝对值编码器实战解析

STM32读取多摩川TS5668N21绝对值编码器实战解析

简介:面向嵌入式开发者的编码器读取程序,针对多摩川TS5668N21型号编码器,结合意法半导体微控制器,解决工业现场位置检测和速度反馈的实时采集问题。资源包为RAR压缩格式,约4.79兆字节,共263个文件&#xff…

2026/10/16 3:47:08 阅读更多 →
从跨境汇款到秒级到账:分布式系统重构实战解析

从跨境汇款到秒级到账:分布式系统重构实战解析

做金融系统的朋友应该都清楚,“跨境汇款慢到怀疑人生”几乎成了行业默认的体验。一笔钱从中国汇到海外,运气好隔天到,运气不好三五天也没动静。我们今年接了一家大型商业银行的跨境汇款系统重构项目,目标很直接:把跨境…

2026/10/16 3:46:08 阅读更多 →

日新闻

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

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

2026/10/16 0:00:05 阅读更多 →
信号与系统频域分析作业解题指南

信号与系统频域分析作业解题指南

1. 作业背景与核心要求解析信号与系统作为电子信息类专业的核心基础课,其作业设计往往直接关联课程的核心知识框架。2026年春季第六次作业的布置,通常对应着课程进展到频域分析的关键阶段。根据常规教学进度推测,本次作业可能涉及以下核心内容…

2026/10/16 0:00:05 阅读更多 →
Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

1. 从一个"四不像"的练手项目说起如果你已经看完了Django的官方教程前几章,跟着敲完了投票应用,大概会有一种"我好像会了,又好像什么都不会"的割裂感。教程里每个知识点都是拆开的——这一章讲模型,下一章讲视…

2026/10/16 0:00:05 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/15 16:18:54 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/15 19:41:51 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/15 13:48:15 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

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

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

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

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/15 9:49:14 阅读更多 →