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

简介: 对于数据量比较的小的,我们直接选择轻量级的用户首选项方式即可,而对于数据量比较大的情况下,直接可以使用数据库,而对于相对来说,比较大的数据,我们就可以使用键值型数据库方式

前言

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

键值型数据库,使用起来是非常的简单的,从字面意思就能知道,它是以键值对的形式进行数据存储和获取的,和用户首选项有着类似的使用方式,但是键值型数据库方式有着自身的限制性因素,第一个就是针对每条记录,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") //和之前保持一致,执行各种的方法即可。
相关文章
|
1天前
|
存储 人工智能 JavaScript
Harmony OS开发-ArkTS语言速成二
本文介绍了ArkTS基础语法,包括三种基本数据类型(string、number、boolean)和变量的使用。重点讲解了let、const和var的区别,涵盖作用域、变量提升、重新赋值及初始化等方面。期待与你共同进步!
61 47
Harmony OS开发-ArkTS语言速成二
|
4天前
|
API 索引
鸿蒙开发:实现一个超简单的网格拖拽
实现拖拽,最重要的三个方法就是,打开编辑状态editMode,实现onItemDragStart和onItemDrop,设置拖拽移动动画和交换数据,如果想到开启补位动画,还需要实现supportAnimation方法。
56 13
鸿蒙开发:实现一个超简单的网格拖拽
|
3天前
|
索引
鸿蒙开发:自定义一个股票代码选择键盘
金融类的软件,特别是股票基金类的应用,在查找股票的时候,都会有一个区别于正常键盘的键盘,也就是股票代码键盘,和普通键盘的区别就是,除了常见的数字之外,也有一些常见的股票代码前缀按钮,方便在查找股票的时候,更加方便的进行检索。
鸿蒙开发:自定义一个股票代码选择键盘
|
3天前
鸿蒙开发:自定义一个英文键盘
实现方式呢,有很多种,目前采用了比较简单的一种,如果大家采用网格Grid组件实现方式,也是可以的,但是需要考虑每行的边距以及数据,还有最后两行的格子占位问题。
鸿蒙开发:自定义一个英文键盘
|
3天前
|
存储 JSON 数据库
鸿蒙元服务项目实战:备忘录内容编辑开发
富文本内容编辑我们直接使用RichEditor组件即可,最重要的就是参数,value: RichEditorOptions,通过它,我们可以用来设置样式,和获取最后的富文本内容,这一点是很重要的。
鸿蒙元服务项目实战:备忘录内容编辑开发
|
2天前
|
前端开发 API 数据库
鸿蒙开发:异步并发操作
在结合async/await进行使用的时候,有一点需要注意,await关键字必须结合async,这两个是搭配使用的,缺一不可,同步风格在使用的时候,如何获取到错误呢,毕竟没有catch方法,其实,我们可以自己创建try/catch来捕获异常。
鸿蒙开发:异步并发操作
|
2天前
|
API
鸿蒙开发:实现popup弹窗
目前提供了两种方式实现popup弹窗,主推系统实现的方式,几乎能满足我们常见的所有场景,当然了,文章毕竟有限,尽量还是以官网为主。
鸿蒙开发:实现popup弹窗
|
3天前
鸿蒙开发:自定义一个车牌字母键盘
车牌字母键盘和一般的键盘还有很大区别的,大家可以发现,键盘上是少一个字母的,因为I字母具有混淆性,所以这个字母是不在车牌键盘内的。
鸿蒙开发:自定义一个车牌字母键盘
|
4天前
|
SQL 关系型数据库 API
HarmonyOs开发:关系型数据库封装之增删改查
每个方法都预留了多种调用方式,比如使用callback异步回调或者使用Promise异步回调,亦或者同步执行,大家在使用的过程中,可以根据自身业务需要进行选择性调用,也分别暴露了成功和失败的方法,可以针对性的判断在执行的过程中是否执行成功。
57 13
|
4天前
|
前端开发 中间件 索引
鸿蒙开发:Navigation路由组件使用由繁入简
使用了插件和路由库之后,在每个Module下都会生成一个路由配置文件,以Module名字+RouterConfig为文件命名,此路由配置文件,也会在AbilityStage中,通过routerInitConfig方法进行自动配置。

热门文章

最新文章