【鸿蒙HarmonyOS NEXT】数据存储之分布式键值数据库
一、环境说明
-
DevEco Studio 版本:
-
API版本:
以12为主
二、分布式键值数据库介绍
KVStore简介:
分布式键值数据库为应用程序提供不同设备间数据库的分布式协同能力。通过调用分布式键值数据库各个接口,应用程序可将数据保存到分布式键值数据库中,并可对分布式键值数据库中的数据进行增加、删除、修改、查询、同步等操作。该模块提供以下分布式键值数据库相关的常用功能:
- KVManager:分布式键值数据库管理实例,用于获取数据库的相关信息。
- KVStoreResultSet:提供获取数据库结果集的相关方法,包括查询和移动数据读取位置等。
- Query:使用谓词表示数据库查询,提供创建Query实例、查询数据库中的数据和添加谓词的方法。
- SingleKVStore:单版本分布式键值数据库,不对数据所属设备进行区分,提供查询数据和同步数据的方法。
- DeviceKVStore:设备协同数据库,继承自SingleKVStore,以设备维度对数据进行区分,提供查询数据和同步数据的方法。
应用场景:
键值型数据库存储键值对形式的数据,当需要存储的数据没有复杂的关系模型,比如存储商品名称及对应价格、员工工号及今日是否已出勤等,由于数据复杂度低,更容易兼容不同数据库版本和设备类型,因此推荐使用键值型数据库持久化此类数据。
常用接口说明:
键值型数据库持久化功能的相关接口,大部分为异步接口。异步接口均有callback和Promise两种返回形式,下表均以callback形式为例,其他接口请查看官网:分布式键值数据库接口说明
三、示例代码加以说明
沿用【鸿蒙HarmonyOS NEXT】页面之间相互传递参数博文中的代码,进行测试。
使用场景说明:用户信息需要在整个app中全局获取到,需要将用户信息在登录的时候存储到分布式键值数据库中。
代码改写如下:
- LoginPage完整代码如下:
import { router } from '@kit.ArkUI'; // 引入Context相关 import { common } from '@kit.AbilityKit'; import { hilog } from '@kit.PerformanceAnalysisKit'; // 引入preferences相关 import { distributedKVStore } from '@kit.ArkData'; import { util } from '@kit.ArkTS'; import { BusinessError } from '@kit.BasicServicesKit'; // 定义ihlog日志常量相关 const TAG: string = '[LoginPage_Context]'; const DOMAIN_NUMBER: number = 0xFF00; @Preview @Entry @Component struct LoginPage { @State message: string = '登录页'; @State btnMsg: string = '登录'; @State account: string = ''; // 账号状态变量 @State password: string = ''; // 密码状态变量 @State isShowProgress: boolean = false; // 显示进度指示器的状态变量 // 获取Context private context = getContext(this) as common.UIAbilityContext; build() { Column() { Text(this.message) .id('HelloWorld') .fontSize(20) .fontWeight(FontWeight.Bold) .width('100%') .height(50) .textAlign(TextAlign.Center) .backgroundColor(0xF1F3F5) Image($r('app.media.startIcon')) .width(150) .height(150) .margin({ top: 40, bottom: 40 }) TextInput({ placeholder: '请输入手机号' }) .maxLength(11)// 最大长度 .type(InputType.Number)// 输入类型为数字 .inputStyle()// 应用自定义样式 .onChange((value: string) => { this.account = value; // 更新账号状态 }) Line().lineStyle() // 应用自定义Line样式 // 密码输入框 TextInput({ placeholder: '请输入密码' }) .maxLength(12)// 最大长度 .type(InputType.Password)// 输入类型为密码 .inputStyle()// 应用自定义样式 .onChange((value: string) => { // TODO: 生产环境需要使用正则表达式对手机号进行验证 this.password = value; // 更新密码状态 }) Line().lineStyle() // 应用自定义Line样式 Button(this.btnMsg) .width('80%') .margin({ top: 100 })