DEV Community

Cover image for 鸿蒙开发:实现键值数据库存储
程序员一鸣
程序员一鸣

Posted on

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

前言

代码运行环境:全部基于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组件。

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

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

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

快速依赖

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

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

ohpm install @abner/datastore
Enter fullscreen mode Exit fullscreen mode

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

"dependencies": { "@abner/datastore": "^1.0.3"}
Enter fullscreen mode Exit fullscreen mode

代码调用

1、初始化

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

DataKvUtil.getInstance().init(this.context, "com.abner.tool")
Enter fullscreen mode Exit fullscreen mode

相关属性介绍

属性 类型 概述
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
KVStoreType 分布式键值数据库类型枚举

DEVICE_COLLABORATION

表示多设备协同数据库

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

SINGLE_VERSION

表示单版本数据库

数据库特点 数据不分设备设备之间修改相同的key会覆盖
Enter fullscreen mode Exit fullscreen mode
SecurityLevel
数据库的安全级别枚举

S1

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

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

S2

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

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

S3

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

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

S4

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

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

2、存储数据

DataKvUtil.getInstance().put("key", "value")
Enter fullscreen mode Exit fullscreen mode

监听是否存储成功

DataKvUtil.getInstance().put("key", "value", (isSuccess:boolean) => {

})
Enter fullscreen mode Exit fullscreen mode

监听是否存储成功和失败

DataKvUtil.getInstance().put("key", "value", (isSuccess:boolean, err:BusinessError) => {
  //当isSuccess 为false,err为报错信息
})
Enter fullscreen mode Exit fullscreen mode

使用Promise异步回调

let pPromise = DataKvUtil.getInstance().putPromise("key", "value")
//自己通过Promise 判断成功和失败
Enter fullscreen mode Exit fullscreen mode

3、获取数据

DataKvUtil.getInstance().get("key", (data) => {

})
Enter fullscreen mode Exit fullscreen mode

监听失败

DataKvUtil.getInstance().get("key", (data) => {

}, (err:BusinessError) => {

})
Enter fullscreen mode Exit fullscreen mode

使用Promise异步回调

let pPromise = DataKvUtil.getInstance().getPromise("key")
//自己通过Promise 获取数据,或判断失败
Enter fullscreen mode Exit fullscreen mode

4、删除数据

DataKvUtil.getInstance().delete("key")
Enter fullscreen mode Exit fullscreen mode

监听是否删除成功

DataKvUtil.getInstance().delete("key", (isSuccess: boolean) => {
  //isSuccess判断是否删除成功
})
Enter fullscreen mode Exit fullscreen mode

监听是否删除失败

DataKvUtil.getInstance().delete("key", (isSuccess: boolean, err?: BusinessError) => {
  //isSuccess为false err为错误信息
})
Enter fullscreen mode Exit fullscreen mode

使用Promise异步回调

let pPromise = DataKvUtil.getInstance().deletePromise("key")
//自己通过Promise判断成功或失败
Enter fullscreen mode Exit fullscreen mode

5、修改数据

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

6、获取默认的StoreId

DataKvUtil.getInstance().getStoreId()
Enter fullscreen mode Exit fullscreen mode

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

DataKvUtil.getInstance().deleteKVStore("storeId")
Enter fullscreen mode Exit fullscreen mode

监听是否删除成功

DataKvUtil.getInstance().deleteKVStore("storeId", (isSuccess: boolean) => {
  //isSuccess判断是否删除成功
})
Enter fullscreen mode Exit fullscreen mode

监听是否删除失败

DataKvUtil.getInstance().deleteKVStore("storeId", (isSuccess: boolean, err?: BusinessError) => {
  //isSuccess为false err为错误信息
})
Enter fullscreen mode Exit fullscreen mode

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

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

DataKvUtil.getInstance().createKVStore("storeId")
Enter fullscreen mode Exit fullscreen mode

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

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

DataKvUtil.getInstance().setKVStore("storeId") //和之前保持一致,执行各种的方法即可。
Enter fullscreen mode Exit fullscreen mode

Top comments (0)