前言
鸿蒙当中数据持久化存储,为我们提供了多种的实现方式,比如用户首选项方式,关系型数据库方式,键值型数据库方式,文件存储方式等等,对于数据量比较的小的,我们直接选择轻量级的用户首选项方式即可,而对于数据量比较大的情况下,直接可以使用数据库,而对于相对来说,比较大的数据,我们就可以使用键值型数据库方式,它是一种介于用户首选项和关系型数据库之间的数据存储方式。
键值型数据库,使用起来是非常的简单的,从字面意思就能知道,它是以键值对的形式进行数据存储和获取的,和用户首选项有着类似的使用方式,但是键值型数据库方式有着自身的限制性因素,第一个就是针对每条记录,Key的长度≤896 Byte,Value的长度<4 MB,而对于单版本数据库,每条记录,Key的长度≤1 KB,Value的长度<4 MB,每个应用最多支持同时打开16个键值型分布式数据库,最后一个就是键值型数据库事件回调方法中不允许进行阻塞操作,比如修改UI组件。
键值数据库常用对象如下:
KVManager:分布式键值数据库管理实例,用于获取数据库的相关信息。
KVStoreResultSet:提供获取数据库结果集的相关方法,包括查询和移动数据读取位置等。
Query:使用谓词表示数据库查询,提供创建Query实例、查询数据库中的数据和添加谓词的方法。
SingleKVStore:单版本分布式键值数据库,不对数据所属设备进行区分,提供查询数据和同步数据的方法。
DeviceKVStore:设备协同数据库,继承自SingleKVStore,以设备维度对数据进行区分,提供查询数据和同步数据的方法。
具体的数据存储这里先不介绍了,大家可以直接查看官方文档即可,这里是介绍封装之后的键值数据库的具体用法。
快速依赖
方式一:在Terminal窗口中,执行如下命令安装三方包,DevEco Studio会自动在工程的oh-package.json5中自动添加三方包依赖。
建议:在使用的模块路径下进行执行命令。
ohpm install @abner/datastore
方式二:在工程的oh-package.json5中设置三方包依赖,配置示例如下:
"dependencies": { "@abner/datastore": "^1.0.3"}
代码调用
1、初始化
建议在AbilityStage里进行初始化,如果你要使用多个文件实例进行存储,可以传递第二个参数。
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
KVStoreType 分布式键值数据库类型枚举。
DEVICE_COLLABORATION
表示多设备协同数据库。
数据库特点: 数据以设备的维度管理,不存在冲突;支持按照设备的维度查询数据。
SINGLE_VERSION
表示单版本数据库。
数据库特点: 数据不分设备,设备之间修改相同的key会覆盖。
SecurityLevel
数据库的安全级别枚举。
S1
表示数据库的安全级别为低级别,数据的泄露、篡改、破坏、销毁可能会给个人或组织导致有限的不利影响。
例如,性别、国籍,用户申请记录等。
S2
表示数据库的安全级别为中级别,数据的泄露、篡改、破坏、销毁可能会给个人或组织导致严重的不利影响。
例如,个人详细通信地址,姓名昵称等。
S3
表示数据库的安全级别为高级别,数据的泄露、篡改、破坏、销毁可能会给个人或组织导致严峻的不利影响。
例如,个人实时精确定位信息、运动轨迹等。
S4
表示数据库的安全级别为关键级别,业界法律法规中定义的特殊数据类型,涉及个人的最私密领域的信息或者一旦泄露、篡改、破坏、销毁可能会给个人或组织造成重大的不利影响数据。
例如,政治观点、宗教、和哲学信仰、工会成员资格、基因数据、生物信息、健康和性生活状况、性取向等或设备认证鉴权、个人的信用卡等财务信息。
2、存储数据
DataKvUtil.getInstance().put("key", "value")
监听是否存储成功
DataKvUtil.getInstance().put("key", "value", (isSuccess:boolean) => {
})
监听是否存储成功和失败
DataKvUtil.getInstance().put("key", "value", (isSuccess:boolean, err:BusinessError) => {
//当isSuccess 为false,err为报错信息
})
使用Promise异步回调
let pPromise = DataKvUtil.getInstance().putPromise("key", "value")
//自己通过Promise 判断成功和失败
3、获取数据
DataKvUtil.getInstance().get("key", (data) => {
})
监听失败
DataKvUtil.getInstance().get("key", (data) => {
}, (err:BusinessError) => {
})
使用Promise异步回调
let pPromise = DataKvUtil.getInstance().getPromise("key")
//自己通过Promise 获取数据,或判断失败
4、删除数据
DataKvUtil.getInstance().delete("key")
监听是否删除成功
DataKvUtil.getInstance().delete("key", (isSuccess: boolean) => {
//isSuccess判断是否删除成功
})
监听是否删除失败
DataKvUtil.getInstance().delete("key", (isSuccess: boolean, err?: BusinessError) => {
//isSuccess为false err为错误信息
})
使用Promise异步回调
let pPromise = DataKvUtil.getInstance().deletePromise("key")
//自己通过Promise判断成功或失败
5、修改数据
修改同添加一致,数据会覆盖原有的key
6、获取默认的StoreId
DataKvUtil.getInstance().getStoreId()
7、删除指定的分布式键值数据库
DataKvUtil.getInstance().deleteKVStore("storeId")
监听是否删除成功
DataKvUtil.getInstance().deleteKVStore("storeId", (isSuccess: boolean) => {
//isSuccess判断是否删除成功
})
监听是否删除失败
DataKvUtil.getInstance().deleteKVStore("storeId", (isSuccess: boolean, err?: BusinessError) => {
//isSuccess为false err为错误信息
})
8、创建一个新的并获取分布式键值数据库
默认会有一个,如果您打算再新建一个,可以调用此方法!
DataKvUtil.getInstance().createKVStore("storeId")
9、新的数据库执行增删改查
先设置自己创建的数据库,也就是第7中的storeId
DataKvUtil.getInstance().setKVStore("storeId") //和之前保持一致,执行各种的方法即可。