前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >鸿蒙开发:实现键值数据库存储

鸿蒙开发:实现键值数据库存储

原创
作者头像
程序员一鸣
修改2025-01-08 10:53:21
修改2025-01-08 10:53:21
2200
举报
文章被收录于专栏:HarmonyOS点石成金

前言

代码运行环境:全部基于HarmonyOs NEXT

DevEco Studio:Build Version: 5.0.3.900

API:12

modelVersion:5.0.0

鸿蒙当中数据持久化存储,为我们提供了多种的实现方式,比如用户首选项方式,关系型数据库方式,键值型数据库方式,文件存储方式等等,对于数据量比较的小的,我们直接选择轻量级的用户首选项方式即可,而对于数据量比较大的情况下,直接可以使用数据库,而对于相对来说,比较大的数据,我们就可以使用键值型数据库方式,它是一种介于用户首选项和关系型数据库之间的数据存储方式。

键值型数据库,使用起来是非常的简单的,从字面意思就能知道,它是以键值对的形式进行数据存储和获取的,和用户首选项有着类似的使用方式,但是键值型数据库方式有着自身的限制性因素,第一个就是针对每条记录,Key的长度≤896 Byte,Value的长度<4 MB,而对于单版本数据库,每条记录,Key的长度≤1 KB,Value的长度<4 MB,每个应用最多支持同时打开16个键值型分布式数据库,最后一个就是键值型数据库事件回调方法中不允许进行阻塞操作,比如修改UI组件。

键值数据库常用对象如下:

代码语言:typescript
复制
KVManager:分布式键值数据库管理实例,用于获取数据库的相关信息。
KVStoreResultSet:提供获取数据库结果集的相关方法,包括查询和移动数据读取位置等。
Query:使用谓词表示数据库查询,提供创建Query实例、查询数据库中的数据和添加谓词的方法。
SingleKVStore:单版本分布式键值数据库,不对数据所属设备进行区分,提供查询数据和同步数据的方法。
DeviceKVStore:设备协同数据库,继承自SingleKVStore,以设备维度对数据进行区分,提供查询数据和同步数据的方法。

具体的数据存储这里先不介绍了,大家可以直接查看官方文档即可,这里是介绍封装之后的键值数据库的具体用法。

快速依赖

方式一:在Terminal窗口中,执行如下命令安装三方包,DevEco Studio会自动在工程的oh-package.json5中自动添加三方包依赖。

建议:在使用的模块路径下进行执行命令。

代码语言:typescript
复制
ohpm install @abner/datastore

方式二:在工程的oh-package.json5中设置三方包依赖,配置示例如下:

代码语言:typescript
复制
"dependencies": { "@abner/datastore": "^1.0.3"}

代码调用

1、初始化

建议在AbilityStage里进行初始化,如果你要使用多个文件实例进行存储,可以传递第二个参数。

代码语言:typescript
复制
DataKvUtil.getInstance().init(this.context, "com.abner.tool")
相关属性介绍

属性

类型

概述

context

Context

上下文

bundleName

string

调用方的包名

option

distributedKVStore.Options

(可选参数)数据库配置信息

option相关参数

属性

类型

必填

说明

createIfMissing

boolean

当数据库文件不存在时是否创建数据库,默认为true,即创建。

encrypt

boolean

设置数据库文件是否加密,封装默认为true,即不加密。

backup

boolean

设置数据库文件是否备份,封装默认为true,即备份。

autoSync

boolean

设置数据库文件是否自动同步。封装默认为true,即手动同步。

kvStoreType

KVStoreType

设置要创建的数据库类型,默认为DEVICE_COLLABORATION,即多设备协同数据库。

securityLevel

SecurityLevel

设置数据库安全级别。

schema

Schema

设置定义存储在数据库中的值,默认为undefined,即不使用Schema。

KVStoreType
代码语言:typescript
复制
KVStoreType 分布式键值数据库类型枚举。

DEVICE_COLLABORATION

表示多设备协同数据库。

数据库特点: 数据以设备的维度管理,不存在冲突;支持按照设备的维度查询数据。

SINGLE_VERSION

表示单版本数据库。

数据库特点: 数据不分设备,设备之间修改相同的key会覆盖。
SecurityLevel
代码语言:typescript
复制
数据库的安全级别枚举。

S1

表示数据库的安全级别为低级别,数据的泄露、篡改、破坏、销毁可能会给个人或组织导致有限的不利影响。

例如,性别、国籍,用户申请记录等。

S2

表示数据库的安全级别为中级别,数据的泄露、篡改、破坏、销毁可能会给个人或组织导致严重的不利影响。

例如,个人详细通信地址,姓名昵称等。

S3

表示数据库的安全级别为高级别,数据的泄露、篡改、破坏、销毁可能会给个人或组织导致严峻的不利影响。

例如,个人实时精确定位信息、运动轨迹等。

S4

表示数据库的安全级别为关键级别,业界法律法规中定义的特殊数据类型,涉及个人的最私密领域的信息或者一旦泄露、篡改、破坏、销毁可能会给个人或组织造成重大的不利影响数据。

例如,政治观点、宗教、和哲学信仰、工会成员资格、基因数据、生物信息、健康和性生活状况、性取向等或设备认证鉴权、个人的信用卡等财务信息。

2、存储数据

代码语言:typescript
复制
DataKvUtil.getInstance().put("key", "value")

监听是否存储成功

代码语言:typescript
复制
DataKvUtil.getInstance().put("key", "value", (isSuccess:boolean) => {

})

监听是否存储成功和失败

代码语言:typescript
复制
DataKvUtil.getInstance().put("key", "value", (isSuccess:boolean, err:BusinessError) => {
  //当isSuccess 为false,err为报错信息
})

使用Promise异步回调

代码语言:typescript
复制
let pPromise = DataKvUtil.getInstance().putPromise("key", "value")
//自己通过Promise 判断成功和失败

3、获取数据

代码语言:typescript
复制
DataKvUtil.getInstance().get("key", (data) => {

})

监听失败

代码语言:typescript
复制
DataKvUtil.getInstance().get("key", (data) => {

}, (err:BusinessError) => {

})

使用Promise异步回调

代码语言:typescript
复制
let pPromise = DataKvUtil.getInstance().getPromise("key")
//自己通过Promise 获取数据,或判断失败

4、删除数据

代码语言:typescript
复制
DataKvUtil.getInstance().delete("key")

监听是否删除成功

代码语言:typescript
复制
DataKvUtil.getInstance().delete("key", (isSuccess: boolean) => {
  //isSuccess判断是否删除成功
})

监听是否删除失败

代码语言:typescript
复制
DataKvUtil.getInstance().delete("key", (isSuccess: boolean, err?: BusinessError) => {
  //isSuccess为false err为错误信息
})

使用Promise异步回调

代码语言:typescript
复制
let pPromise = DataKvUtil.getInstance().deletePromise("key")
//自己通过Promise判断成功或失败

5、修改数据

修改同添加一致,数据会覆盖原有的key

6、获取默认的StoreId

代码语言:typescript
复制
DataKvUtil.getInstance().getStoreId()

7、删除指定的分布式键值数据库

代码语言:typescript
复制
DataKvUtil.getInstance().deleteKVStore("storeId")

监听是否删除成功

代码语言:typescript
复制
DataKvUtil.getInstance().deleteKVStore("storeId", (isSuccess: boolean) => {
  //isSuccess判断是否删除成功
})

监听是否删除失败

代码语言:typescript
复制
DataKvUtil.getInstance().deleteKVStore("storeId", (isSuccess: boolean, err?: BusinessError) => {
  //isSuccess为false err为错误信息
})

8、创建一个新的并获取分布式键值数据库

默认会有一个,如果您打算再新建一个,可以调用此方法!

代码语言:typescript
复制
DataKvUtil.getInstance().createKVStore("storeId")

9、新的数据库执行增删改查

先设置自己创建的数据库,也就是第7中的storeId

代码语言:typescript
复制
DataKvUtil.getInstance().setKVStore("storeId") //和之前保持一致,执行各种的方法即可。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 快速依赖
  • 代码调用
    • 1、初始化
      • 相关属性介绍
    • 2、存储数据
    • 3、获取数据
    • 4、删除数据
    • 5、修改数据
    • 6、获取默认的StoreId
    • 7、删除指定的分布式键值数据库
    • 8、创建一个新的并获取分布式键值数据库
    • 9、新的数据库执行增删改查
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档