前言
鸿蒙当中数据持久化存储,为我们提供了多种的实现方式,比如用户首选项方式,关系型数据库方式,键值型数据库方式,文件存储方式等等,对于数据量比较的小的,我们直接选择轻量级的用户首选项方式即可,而对于数据量比较大的情况下,直接可以使用数据库,而对于相对来说,比较大的数据,我们就可以使用键值型数据库方式,它是一种介于用户首选项和关系型数据库之间的数据存储方式。
键值型数据库,使用起来是非常的简单的,从字面意思就能知道,它是以键值对的形式进行数据存储和获取的,和用户首选项有着类似的使用方式,但是键值型数据库方式有着自身的限制性因素,第一个就是针对每条记录,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") //和之前保持一致,执行各种的方法即可。