HarmonyOS 数据持久化 关系型数据库之 查询逻辑编写

前面两篇文章 HarmonyOS 数据持久化 关系型数据库之 初始化操作 和 HarmonyOS 数据持久化 关系型数据库之 增删改逻辑编写 我们已经编写了 初始化 和 增删改 操作的基本逻辑 最后 收尾一下查询的函数

我们还是打开编辑器 然后 打开项目
找到 我们正在写的这个 relationalClass 类
在这里插入图片描述
我们在下面再加一个函数 叫 getTaskList
一个驼峰命名法

第一步 肯定是构建条件 之前我们删和改也有讲过 这里仔细说一下
首先

let predicates = new relationalStore.RdbPredicates("TASK")

RdbPredicates 中 传入表名
然后 你直接用这个 new 出来的对象
predicates 后面 打个点 就会弹出它所有能操作的条件了

predicates.

在这里插入图片描述
因为这里 我们打算查整表 就不传条件了

但是 这里 我们还需要对查询结果做解析 那么 我们需要定义一个类 来记录我们表的数据结构类型
就像java 你要做数据库操作 要有一个属性类 harmonyos这个地方也是一样的

我们在自己这个 utils 包下创建一个 ets文件
在这里插入图片描述
就叫 Task 吧 与表同名 看着规范一点
编写代码如下

@Observed
export default class TaskInfo{id: numbername:stringfinished: booleanconstructor(id:number, name:string, finished:boolean){this.id = id;this.name = name;this.finished = finished;}
}

这里 代码也很简单
之所以 要用 ets文件 是因为 只有ets 才能用 @Observed 注解
这个 注解 我之前的文章也有讲过 HarmonyOS 状态管理装饰器 Observed与ObjectLink 处理嵌套对象/对象数组 结构双向绑定
然后 定义了和我们数据库表相对应的三个字段
最后在constructor构造函数中 接收三个值 给我们的类中的三个值赋值

然后 我们在 relationalClass 中导入 Task

import TaskInfo from "./Task";

在这里插入图片描述
然后 抱歉 我犯了个很致命的错误
报错
Importing ArkTS files to JS and TS files is not allowed.
意思是 ts文件中是不能引入 ets文件的

我们右键relationalClass.ts 如下图选择
在这里插入图片描述
将后缀改为ets即可
在这里插入图片描述
这样 就OK啦
在这里插入图片描述
然后 我们直接编写getTaskList代码如下

//查询 Task 表数据
async getTaskList() {// 创建predicates 传入表名let predicates = new relationalStore.RdbPredicates("TASK")/*通过 rdbStore对象 执行 query查询函数第一个参数 条件对象 第二个参数 字符串数组 说明要查询的字段定义 result 接收查询结果*/let result = await this.rdbStore.query(predicates,["ID", "NAME", "FINISHED"])//定义一个 TaskInfo 类型的数组 叫 TaskList 用于接收结果let TaskList:TaskInfo[] = [];//对result进行遍历  while循环 条件 isAtLastRow当前是否在最后一行 如果不是 则 一直往下走while(!result.isAtLastRow) {//调用 goToNextRow 进入下一行result.goToNextRow()//定义id 字段 等于 result.getLong getLong意思是获取数字类型 getColumnIndex 指定字段IDlet id = result.getLong(result.getColumnIndex('ID'))//定义name 等于 result.getString 字符串类型要用getString getColumnIndex指定读取字段NAMElet name = result.getString(result.getColumnIndex('NAME'))//定义 finished 等于result.getLong 因为 boolean类型存入数据库  就是数字类型 0/1 我们getColumnIndex自定FINISHEDlet finished = result.getLong(result.getColumnIndex('FINISHED'))//然后 直接将结果push 到TaskList里面//注意这里finished是数字类型的  0/1  但我们类中是boolean 类型 所以要转一下TaskList.push({id,name,finished: (finished == 1?true:false)})}//最后 将处理好的TaskList返回回去return TaskList
}

我自认为自己的注释已经写的很用心了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/527080.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FPGA - 时钟Buffer的探究

1、IBUF : FPGA上所有的输入信号必须进过IBUF,vivado会自动给所有输入信号分配IBUF OBUF:FPGA上所有的输入信号必须进过IBUF,vivado会自动给所有输入信号分配OBUF BUFG:专用时钟的资源,目的是减少时钟抖动、增强时钟的驱动能力,vivado不会给信…

L2-2 老板的作息表(Python)

作者 陈越 单位 浙江大学 新浪微博上有人发了某老板的作息时间表,表示其每天 4:30 就起床了。但立刻有眼尖的网友问:这时间表不完整啊,早上九点到下午一点干啥了? 本题就请你编写程序,检查任意一张时间表&#xff0c…

Linux Docker安装redis缓存数据库

文章目录 一、查找Redis镜像二、拉取redis镜像三、创建数据目录和配置文件四、创建redis容器 一、查找Redis镜像 首先到docker镜像仓库下载redis镜像。地址:https://hub.docker.com/搜索redis,如下:找到对应想要下载的版本: 二、…

Leetcode - 二分查找 | 在排序数组中查找元素的第一个和最后一个位置

题目一:二分查找 二分查找 看到这道题之后,很快就能想到暴力的解法,把数组遍历一遍就能找到答案,时间复杂度O(n)。 假设存在一批数字[1,1,3,4,5,6,7&#x…

面试宝典-【redis】

目录 1.什么是缓存穿透 ? 怎么解决 ? 2.什么是布隆过滤器 3.什么是缓存击穿 ? 怎么解决 ? 4.什么是缓存雪崩 ? 怎么解决 ? 5.redis做为缓存,mysql数据如何与redis进行同步?(双写) 6.排他锁是如何保证读写、读读互斥的呢? 7.你听说过延…

Java EE之wait和notify

一.多线程的执行顺序 由于多个线程执行是抢占式执行,就会导致顺序不同,同时就会导致出现问题,就比如俩个线程同时对同一个变量进行修改,我们难以预知执行顺序。 但在实际开发中,我们希望代码按一定的逻辑顺序执行&am…

C++ 多状态dp

目录 按摩师 打家劫舍 打家劫舍2 删除并获得点数 粉刷房子 按摩师 面试题 17.16. 按摩师 最大值问题 f : 预约此次的最长时间 g :不预约此次的最长时间 出现的错误:return max(f[n - 1]), g[n - 1]); 注意:①题目没给nums的范围&…

uniapp 云开发笔记

uniapp云开发官方文档https://uniapp.dcloud.io/uniCloud/learning.html 新建 关联云空间 云函数获取用户openID uniCloud API列表https://uniapp.dcloud.io/uniCloud/cf-functions.html#unicloud-api%E5%88%97%E8%A1%A8 自建云函数login event中包含前端传来的参数 uniCloud.…

Linux第74步_“设备树”下的LED驱动

使用新字符设备驱动的一般模板,以及设备树,驱动LED。 1、添加“stm32mp1_led”节点 打开虚拟机上“VSCode”,点击“文件”,点击“打开文件夹”,点击“zgq”,点击“linux”,点击“atk-mp1”&am…

使用阿里云服务器搭建网站教程,就这么简单!

使用阿里云服务器快速搭建网站教程,先为云服务器安装宝塔面板,然后在宝塔面板上新建站点,阿里云百科aliyunbaike.com以搭建WordPress网站博客为例,来详细说下从阿里云服务器CPU内存配置选择、Web环境、域名解析到网站上线全流程&a…

OS-Copilot:实现具有自我完善能力的通用计算机智能体

🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ AI 缩小了人类间的知识和技术差距 论文标题:OS-Copilot: Towards Generalist Computer Agents with Self-Improvement 论文链接:https://arxiv.org/abs/2402.07456 项目主页&a…

软件报错提示缺少D3DCompiler_47.dll文件怎么解决

许多用户在运行游戏或电脑软件时,遇到了一个提示“找不到d3dcompiler_47.dll”的错误消息。这个问题相当普遍,这个错误通常是由于系统中缺少关键的d3dcompiler_47.dll文件所导致的,而这个文件是很多应用程序运行的必要条件,特别是…