HarmonyOSNext 端云一体化(4)

HarmonyOSNext 端云一体化(4)

在上一章节我们讲了数据库数据表的一些基本操作。如query、upsert、delete和calculateQuery。这一章节主要来讲解各种查询条件操作。如 查询班级年龄大于30的同学等。

查询条件解释

谓词,用来代替或者展示其客体性质、特征或者客体之间关系的词项

这些查询条件在端云一体中解释中叫做谓词。云数据库中提供丰富的谓词查询来构建查询条件。根据谓词查询方法构造自己的

DatabaseQuery对象。

查询条件谓词一览

关键字说明
equalTo表示等于的条件判断,用于查询中筛选出与指定值相等的数据
notEqualTo表示不等于的条件判断,筛选出与指定值不相等的数据
beginsWith表示以某个值开头,用于查询开头匹配特定字符串的数据
endsWith表示以某个值结尾,用于查询结尾匹配特定字符串的数据
contains表示包含某个值,用于查询包含特定字符串的数据
greaterThan表示大于,用于数值类型数据的比较,筛选出大于指定值的数据
greaterThanOrEqualTo表示大于或等于,筛选出大于或等于指定值的数据
lessThan表示小于,用于数值类型数据的比较,筛选出小于指定值的数据
lessThanOrEqualTo表示小于或等于,筛选出小于或等于指定值的数据
in用于判断某个值是否在指定的集合内,常用于查询符合多个值中某一个的数据
isNull用于判断某个字段是否为空值
isNotNull用于判断某个字段是否不为空值
orderByAsc按升序排列,用于对查询结果按照指定字段进行从小到大的排序
orderByDesc按降序排列,用于对查询结果按照指定字段进行从大到小的排序
limit限制查询结果返回的数量
beginGroup开始一个逻辑分组,用于将多个条件组合在一起作为一个逻辑单元
endGroup结束一个逻辑分组
or逻辑或,用于连接多个条件,只要其中一个条件满足则整个逻辑表达式为真
and逻辑与,用于连接多个条件,只有所有条件都满足时整个逻辑表达式才为真

谓词使用示例

equalTo 查询id为20的数据

this.condition.equalTo("id", 20) 

notEqualTo 查询id不等于20的数据

this.condition.notEqualTo("id", 20) 

beginsWith 查询name字段以b开头的数据

this.condition.beginsWith("name", "b") 

endsWith 查询name字段以k结尾的数据

this.condition.endsWith("name", "k") 

contains 查询name字段包含k的数据

this.condition.contains("name", "k") 

greaterThan 查询price字段大于30的数据

this.condition.greaterThan("price", 30) 

greaterThanOrEqualTo 查询price字段大于或者等于30的数据

this.condition.greaterThanOrEqualTo("price", 30) 

lessThan 查询price字段小于30的数据

this.condition.lessThan("price", 30) 

lessThanOrEqualTo 查询price字段小于或者等于30的数据

this.condition.lessThanOrEqualTo("price", 30) 

in 查询name字段包含在[“book”,“aaaa”,“bbbb”]的中数据

this.condition.in("name", ["book", "aaaa", "bbbb"]) 

isNull 查询name字段是否为null

this.condition.isNull("name") 

isNotNull 查询name字段是否非null

this.condition.isNotNull("name") 

orderByAsc 根据id,进行升序

this.condition.orderByAsc("id") 

orderByDesc 根据id,进行降序

this.condition.orderByDesc("id") 

limit 查询2条数据,从第1条开始

this.condition.limit(2, 1) 

or 逻辑或,查询name=book 或者 price>30的数据

this.condition.equalTo("name", "book").or().greaterThan('price', 30) 

and 逻辑与,查询name=book123 并且 price>30的数据

this.condition.equalTo("name", "book123").and().greaterThan('price', 30) 

beginGroup 和 endGroup 表示一对逻辑分组

 // 条件1:   name=book并且price>30

  // 条件2:   id=20或者price>30

  // 需求: 查询 条件1 和 条件2 同时满足的数据
  this.condition
    .beginGroup()
    .equalTo('name', 30)
    .and()
    .greaterThan('price', 30)
    .endGroup()
    .and()
    .beginGroup()
    .equalTo('id', 20)
    .or()
    .greaterThan('price', 30)
    .endGroup();

加强

上面的谓词,也是根据实际语义搭配一起使用。比如:查询name=book的前2条数据

总结

本章主要介绍了HarmonyOSNext端云一体化中的数据库查询条件操作:

  1. 介绍了查询条件中的谓词概念,它用于展示或描述数据的性质、特征或关系

  2. 详细列举了常用的查询谓词,包括:

    • 比较类:equalTo、notEqualTo、greaterThan、lessThan等
    • 字符串匹配:beginsWith、endsWith、contains
    • 空值判断:isNull、isNotNull
    • 集合操作:in
    • 排序限制:orderByAsc、orderByDesc、limit
    • 逻辑组合:and、or、beginGroup、endGroup
  3. 通过具体示例展示了各种谓词的使用方法,包括基本查询和复杂的组合查询

  4. 说明了谓词可以根据实际需求灵活组合使用,以实现更复杂的查询功能


如果你兴趣想要了解更多的鸿蒙应用开发细节和最新资讯,欢迎在评论区留言或者私信或者看我个人信息,可以加入技术交流群。

标题“51单片机通过MPU6050-DMP获取姿态角例程”解析 “51单片机通过MPU6050-DMP获取姿态角例程”是一个基于51系列单片机(一种常见的8位微控制器)的程序示例,用于读取MPU6050传感器的数据,并通过其内置的数字运动处理器(DMP)计算设备的姿态角(如倾斜角度、旋转角度等)。MPU6050是一款集成三轴加速度计和三轴陀螺仪的六自由度传感器,广泛应用于运动控制和姿态检测领域。该例程利用MPU6050的DMP功能,由DMP处理复杂的运动学算法,例如姿态融合,将加速度计和陀螺仪的数据进行整合,从而提供稳定且实时的姿态估计,减轻主控MCU的计算负担。最终,姿态角数据通过LCD1602显示屏以字符形式可视化展示,为用户提供直观的反馈。 从标签“51单片机 6050”可知,该项目主要涉及51单片机和MPU6050传感器这两个关键硬件组件。51单片机基于8051内核,因编程简单、成本低而被广泛应用;MPU6050作为惯性测量单元(IMU),可测量设备的线性和角速度。文件名“51-DMP-NET”可能表示这是一个与51单片机及DMP相关的网络资源或代码库,其中可能包含C语言等适合51单片机的编程语言的源代码、配置文件、用户手册、示例程序,以及可能的调试工具或IDE项目文件。 实现该项目需以下步骤:首先是硬件连接,将51单片机与MPU6050通过I2C接口正确连接,同时将LCD1602连接到51单片机的串行数据线和控制线上;接着是初始化设置,配置51单片机的I/O端口,初始化I2C通信协议,设置MPU6050的工作模式和数据输出速率;然后是DMP配置,启用MPU6050的DMP功能,加载预编译的DMP固件,并设置DMP输出数据的中断;之后是数据读取,通过中断服务程序从DMP接收姿态角数据,数据通常以四元数或欧拉角形式呈现;再接着是数据显示,将姿态角数据转换为可读的度数格
MathorCup高校数学建模挑战赛是一项旨在提升学生数学应用、创新和团队协作能力的年度竞赛。参赛团队需在规定时间内解决实际问题,运用数学建模方法进行分析并提出解决方案。2021年第十一届比赛的D题就是一个典型例子。 MATLAB是解决这类问题的常用工具。它是一款强大的数值计算和编程软件,广泛应用于数学建模、数据分析和科学计算。MATLAB拥有丰富的函数库,涵盖线性代数、统计分析、优化算法、信号处理等多种数学操作,方便参赛者构建模型和实现算法。 在提供的文件列表中,有几个关键文件: d题论文(1).docx:这可能是参赛队伍对D题的解答报告,详细记录了他们对问题的理解、建模过程、求解方法和结果分析。 D_1.m、ratio.m、importfile.m、Untitled.m、changf.m、pailiezuhe.m、huitu.m:这些是MATLAB源代码文件,每个文件可能对应一个特定的计算步骤或功能。例如: D_1.m 可能是主要的建模代码; ratio.m 可能用于计算某种比例或比率; importfile.m 可能用于导入数据; Untitled.m 可能是未命名的脚本,包含临时或测试代码; changf.m 可能涉及函数变换; pailiezuhe.m 可能与矩阵的排列组合相关; huitu.m 可能用于绘制回路图或流程图。 matlab111.mat:这是一个MATLAB数据文件,存储了变量或矩阵等数据,可能用于后续计算或分析。 D-date.mat:这个文件可能包含与D题相关的特定日期数据,或是模拟过程中用到的时间序列数据。 从这些文件可以推测,参赛队伍可能利用MATLAB完成了数据预处理、模型构建、数值模拟和结果可视化等一系列工作。然而,具体的建模细节和解决方案需要查看解压后的文件内容才能深入了解。 在数学建模过程中,团队需深入理解问题本质,选择合适的数学模
以下是关于三种绘制云图或等高线图算法的介绍: 一、点距离反比插值算法 该算法的核心思想是基于已知数据点的值,计算未知点的值。它认为未知点的值与周围已知点的值相关,且这种关系与距离呈反比。即距离未知点越近的已知点,对未知点值的影响越大。具体来说,先确定未知点周围若干个已知数据点,计算这些已知点到未知点的距离,然后根据距离的倒数对已知点的值进行加权求和,最终得到未知点的值。这种方法简单直观,适用于数据点分布相对均匀的情况,能较好地反映数据在空间上的变化趋势。 二、双线性插值算法 这种算法主要用于处理二维数据的插值问题。它首先将数据点所在的区域划分为一个个小的矩形单元。当需要计算某个未知点的值时,先找到该点所在的矩形单元,然后利用矩形单元四个顶点的已知值进行插值计算。具体过程是先在矩形单元的一对对边上分别进行线性插值,得到两个中间值,再对这两个中间值进行线性插值,最终得到未知点的值。双线性插值能够较为平滑地过渡数据值,特别适合处理图像缩放、地理数据等二维场景中的插值问题,能有效避免插值结果出现明显的突变。 三、面距离反比 + 双线性插值算法 这是一种结合了面距离反比和双线性插值两种方法的算法。它既考虑了数据点所在平面区域对未知点值的影响,又利用了双线性插值的平滑特性。在计算未知点的值时,先根据面距离反比的思想,确定与未知点所在平面区域相关的已知数据点集合,这些点对该平面区域的值有较大影响。然后在这些已知点构成的区域内,采用双线性插值的方法进行进一步的插值计算。这种方法综合了两种算法的优点,既能够较好地反映数据在空间上的整体分布情况,又能保证插值结果的平滑性,适用于对插值精度和数据平滑性要求较高的复杂场景。
### HarmonyOS Next 开发中首选项的使用与配置 #### 首选项概述 HarmonyOS Next 提供了用户首选项(Preferences)作为轻量级的数据持久化方案,适用于存储少量数据,例如用户的个性化设置或应用的配置信息[^3]。这些数据以键值对形式存储,其中键为字符串类型,而值可以是数字型、字符型、布尔型及其对应的数组类型。 #### 数据存储特点 - **轻量化设计**:由于所有数据会加载至内存中,因此不推荐存储大量数据集,以免造成过高的内存消耗。 - **快速访问**:得益于内存中的缓存机制,读取速度极快。 - **同步与异步操作支持**:开发者可以选择同步或异步的方式完成数据的读写操作。 - **多种数据类型支持**:除了基本数据类型外,还支持其数组形式的存储。 #### 示例代码展示 以下是基于 HarmonyOS Next 的 Preference 使用示例: ```typescript // 导入必要的模块 import preferences from '@ohos.data.preferences'; async function saveData() { try { // 创建一个名为 'userSettings' 的偏好对象实例 const pref = await preferences.getPreferences('userSettings'); // 同步保存数据 pref.putBoolean('isDarkMode', true); pref.putString('themeColor', '#FFFFFF'); pref.putInt('fontSize', 18); // 异步保存更改到磁盘 await pref.flush(); console.log('Data saved successfully.'); } catch (error) { console.error(`Error saving data: ${error}`); } } async function readData() { try { // 获取已创建的偏好对象实例 const pref = await preferences.getPreferences('userSettings'); // 同步读取数据 const isDarkModeEnabled = pref.getBoolean('isDarkMode', false); // 默认值为false const themeColor = pref.getString('themeColor', ''); // 默认值为空字符串 const fontSize = pref.getInt('fontSize', 14); // 默认值为14 console.log(`Dark Mode Enabled: ${isDarkModeEnabled}, Theme Color: ${themeColor}, Font Size: ${fontSize}`); } catch (error) { console.error(`Error reading data: ${error}`); } } ``` 上述代码展示了如何通过 `preferences` 模块实现数据的存储与读取功能[^2]。 #### 封装优化 为了提高代码可维护性和复用性,可以通过封装简化 Preference 的调用逻辑。以下是一个简单的封装示例: ```typescript class UserPreferenceManager { private static instance: UserPreferenceManager; private prefs: any; constructor(prefName: string) { this.initPrefs(prefName); } public static getInstance(prefName: string): UserPreferenceManager { if (!UserPreferenceManager.instance) { UserPreferenceManager.instance = new UserPreferenceManager(prefName); } return UserPreferenceManager.instance; } private async initPrefs(prefName: string) { this.prefs = await preferences.getPreferences(prefName); } public async put(key: string, value: any): Promise<void> { switch (typeof value) { case 'boolean': this.prefs.putBoolean(key, value as boolean); break; case 'number': this.prefs.putInt(key, value as number); break; case 'string': this.prefs.putString(key, value as string); break; default: throw new Error('Unsupported type for preference storage.'); } await this.prefs.flush(); // 确保数据立即保存到磁盘 } public get<T>(key: string, defaultValue?: T): T | undefined { const result = this.prefs.get(key, defaultValue); return typeof result === 'undefined' ? defaultValue : result; } } const userManager = UserPreferenceManager.getInstance('userSettings'); userManager.put('isDarkMode', true).then(() => console.log('Setting updated.')); console.log(userManager.get<boolean>('isDarkMode')); // 输出true ``` 此封装类实现了单例模式并提供了通用方法来管理 Preference 存储的操作。 #### 总结 HarmonyOS Next 中的用户首选项是一种高效便捷的小规模数据存储工具,适合于保存应用程序的状态和用户偏好的简单场景。通过合理利用同步/异步 API 和自定义封装,能够显著提升开发效率和代码质量。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

万少-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值