鸿蒙关系数据库代码案例
鸿蒙关系数据库代码案例单页写完便于新手入门学习// Index.ets import relationalStore from ohos.data.relationalStore; import common from ohos.app.ability.common; // 数据表常量 const TABLE_NAME user; const DB_NAME PracticeDB.db; const DB_CONFIG: relationalStore.StoreConfig { name: DB_NAME, securityLevel: relationalStore.SecurityLevel.S1 }; // 用户实体 interface User { id?: number;name: string; age: number; } Entry Component struct RdbCurdDemo { State userList: User[] []; State inputName: string ; State inputAge: number 18; rdbStore: relationalStore.RdbStore | null null; ctx: common.UIAbilityContext | null null; aboutToAppear() { this.ctx getContext(this) as common.UIAbilityContext; this.initDB(); } // 初始化数据库、创建表 async initDB() { if (!this.ctx) return; try { this.rdbStore await relationalStore.getRdbStore(this.ctx, DB_CONFIG); const createSql CREATE TABLE IF NOT EXISTS ${TABLE_NAME} ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, age INTEGER ); await this.rdbStore.executeSql(createSql); console.info(数据库初始化成功); this.queryAll(); } catch (err) { console.error(初始化失败, JSON.stringify(err)); } } // 【CREATE】新增 async insertUser() { if (!this.rdbStore || !this.inputName) return; const valueBucket: relationalStore.ValuesBucket { name: this.inputName, age: this.inputAge }; try { const rowId await this.rdbStore.insert(TABLE_NAME, valueBucket); console.info(新增成功 rowId:, rowId); this.queryAll(); } catch (e) { console.error(新增失败, e); } } // 【READ】查询全部修复重点使用RdbPredicates async queryAll() { if (!this.rdbStore) return; let resultSet: relationalStore.ResultSet | null null; try { // ✅ 正确写法构造查询条件对象不再直接传表名字符串 const predicates new relationalStore.RdbPredicates(TABLE_NAME); resultSet await this.rdbStore.query(predicates, [id, name, age]); const list: User[] []; // !非空断言resultSet这里一定有值 while (resultSet.goToNextRow()) { list.push({ id: resultSet.getLong(0), name: resultSet.getString(1), age: resultSet.getLong(2) }); } this.userList list; } catch (e) { console.error(查询失败, e); } finally { // 关闭游标 if (resultSet ! null) { resultSet.close(); } } } // 【UPDATE】修改 async updateUser(userId: number, newName: string) { if (!this.rdbStore) return; const bucket: relationalStore.ValuesBucket { name: newName }; const predicates new relationalStore.RdbPredicates(TABLE_NAME); predicates.equalTo(id, userId); try { const count await this.rdbStore.update(bucket, predicates); console.info(更新行数${count}); this.queryAll(); } catch (e) { console.error(更新失败, e); } } // 【DELETE】删除 async deleteUser(userId: number) { if (!this.rdbStore) return; const predicates new relationalStore.RdbPredicates(TABLE_NAME); predicates.equalTo(id, userId); try { const delCount await this.rdbStore.delete(predicates); console.info(删除行数${delCount}); this.queryAll(); } catch (e) { console.error(删除失败, e); } } build() { Column() { Text(RDB数据库 CURD 练习) .fontSize(24) .fontWeight(FontWeight.Bold) .margin({ bottom: 12 }) Row() { TextInput({ text: this.inputName, placeholder: 姓名 }) .width(120) .onChange((v: string) this.inputName v) TextInput({ text: this.inputAge.toString(), placeholder: 年龄 }) .width(80) .margin({ left: 6 }) .onChange((v: string) { const num Number(v); this.inputAge isNaN(num) ? 0 : num; }) }.margin({ bottom: 8 }) Button(新增用户) .width(90%) .onClick(() this.insertUser()) Text( 用户列表 ).margin({ top: 12 }) List() { ForEach(this.userList, (item: User) { ListItem() { Row() { Text(ID:${item.id} ${item.name} ${item.age}岁) .layoutWeight(1) Button(改名字) .fontSize(12) .margin({ right: 4 }) .onClick(() this.updateUser(item.id!, item.name _edit)) Button(删除) .fontSize(12) .backgroundColor(#dc3545) .onClick(() this.deleteUser(item.id!)) } } }) } .width(100%) .height(300) .margin({ top: 8 }) } .width(100%) .padding(16) } }

相关新闻

Unity学习全攻略:从环境搭建到性能优化的系统指南

Unity学习全攻略:从环境搭建到性能优化的系统指南

1. 项目概述:为什么我们需要一份“Awesome Unity Tutorial”指南?如果你在搜索引擎里敲下“Unity教程”这四个字,得到的海量结果可能会让你瞬间陷入选择困难。从官方文档到B站UP主的系列视频,从GitHub上的开源项目到各种付费课程&…

2026/10/19 11:22:00 阅读更多 →
Unity集成讯飞星火与Motionverse打造实时对话虚拟客服

Unity集成讯飞星火与Motionverse打造实时对话虚拟客服

1. 项目概述与核心价值最近在做一个虚拟展厅的项目,客户提了个挺有意思的需求:希望展厅里的虚拟客服不仅能回答预设问题,还能像真人一样,根据访客的实时提问,进行自然、流畅的对话,并且最好能配上相应的口型…

2026/10/19 11:38:34 阅读更多 →
基于LLM Agent的推荐系统智能诊断:从规则引擎到自主推理的实践

基于LLM Agent的推荐系统智能诊断:从规则引擎到自主推理的实践

1. 从“调接口”到“会思考”:推荐系统诊断的范式跃迁在推荐系统的日常迭代和维护中,我们常常陷入一种“消防员”式的被动响应模式。线上指标(如点击率、转化率)突然下跌,业务方一个电话过来,我们第一反应是…

2026/10/17 16:11:22 阅读更多 →

最新新闻

国产ZXDoc突围Vector垄断:文件解析与SDK替换实战解析

国产ZXDoc突围Vector垄断:文件解析与SDK替换实战解析

简介:面向汽车电子与嵌入式研发工程师、新能源车总线测试人员,围绕国产ZXDoc突围Vector垄断主题整理的项目代码资源,可帮助快速了解其在四大车载总线协议支持、DBC智能解析、ECU刷写与XCP标定等方面的技术特性与市场定位。ZIP压缩包体积仅6KB…

2026/10/20 10:07:49 阅读更多 →
STM32Cube FW-F4 V1.27.1:固件包版本管理与HAL迁移避坑指南

STM32Cube FW-F4 V1.27.1:固件包版本管理与HAL迁移避坑指南

简介:ST意法半导体STM32F4系列固件库V1.27.1,专供CubeMX配置工具使用的驱动包,面向嵌入式开发者和硬件工程师,解决F4芯片外设驱动移植、初始化代码生成和软硬件适配问题。压缩包包含230个文件,以96个C源码与102个H头文…

2026/10/20 10:07:49 阅读更多 →
Linux bash从入门到脚本:命令、变量、条件循环与调试手册

Linux bash从入门到脚本:命令、变量、条件循环与调试手册

我到现在还记得第一次打开Linux虚拟机时,屏幕上只有一个孤零零的提示符,等着我输入点什么。周围坐着的同学已经在鼠标点来点去,我却面对着那个黑乎乎的窗口发呆:我该敲什么?它能听懂我说话吗?后来才知道&am…

2026/10/20 10:07:49 阅读更多 →
厂商AI能力对比:别只看跑分,落地效果才是关键

厂商AI能力对比:别只看跑分,落地效果才是关键

1. 我做厂商AI能力对比时踩过的第一个坑:只盯模型跑分1.1 跑分背后的"应试教育"逻辑前两年我负责一个内部智能化项目的选型,当时团队拿到三家厂商的材料,第一反应就是打开公版测试榜单,看谁家模型排得高。最后选了分数最…

2026/10/20 10:07:49 阅读更多 →
OpenClaw访问白屏排查实战:从浏览器到服务端全链路定位

OpenClaw访问白屏排查实战:从浏览器到服务端全链路定位

1. 白屏问题的现象描述与影响范围先说结论:OpenClaw 访问白屏,这个问题我在维护自建网关服务时踩过,处理完回头看,其实根因并不复杂,但排查过程容易走弯路。如果你也遇到了类似情况,页面打开一片空白、控制…

2026/10/20 10:07:49 阅读更多 →
开源wehcat08算法:增量文本聚类的轻量级方案

开源wehcat08算法:增量文本聚类的轻量级方案

简介:开源wehcat08算法的完整源代码包,面向关注iPad协议及自定义算法实现的研究者与Go开发者。该算法虽非通用标准算法,但包内提供了从核心逻辑到运行环境的全套内容,适合用于学习协议处理、TLS加密通信以及Go项目工程化布局。资源…

2026/10/20 10:06:48 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

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

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

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

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

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

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 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/20 10:02:08 阅读更多 →
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/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练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/20 9:50:45 阅读更多 →