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

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

前言


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

DevEco Studio:Build Version: 5.0.3.900

API:12

modelVersion5.0.0


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


键值型数据库,使用起来是非常的简单的,从字面意思就能知道,它是以键值对的形式进行数据存储和获取的,和用户首选项有着类似的使用方式,但是键值型数据库方式有着自身的限制性因素,第一个就是针对每条记录,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") //和之前保持一致,执行各种的方法即可。
相关文章
|
14天前
|
存储 人工智能 JavaScript
Harmony OS开发-ArkTS语言速成二
本文介绍了ArkTS基础语法,包括三种基本数据类型(string、number、boolean)和变量的使用。重点讲解了let、const和var的区别,涵盖作用域、变量提升、重新赋值及初始化等方面。期待与你共同进步!
77 47
Harmony OS开发-ArkTS语言速成二
|
16天前
|
API 索引
鸿蒙开发:实现一个超简单的网格拖拽
实现拖拽,最重要的三个方法就是,打开编辑状态editMode,实现onItemDragStart和onItemDrop,设置拖拽移动动画和交换数据,如果想到开启补位动画,还需要实现supportAnimation方法。
74 13
鸿蒙开发:实现一个超简单的网格拖拽
|
16天前
|
索引 API
鸿蒙开发:自定义一个股票代码选择键盘
金融类的软件,特别是股票基金类的应用,在查找股票的时候,都会有一个区别于正常键盘的键盘,也就是股票代码键盘,和普通键盘的区别就是,除了常见的数字之外,也有一些常见的股票代码前缀按钮,方便在查找股票的时候,更加方便的进行检索。
鸿蒙开发:自定义一个股票代码选择键盘
|
16天前
|
API
鸿蒙开发:自定义一个英文键盘
实现方式呢,有很多种,目前采用了比较简单的一种,如果大家采用网格Grid组件实现方式,也是可以的,但是需要考虑每行的边距以及数据,还有最后两行的格子占位问题。
鸿蒙开发:自定义一个英文键盘
|
16天前
|
存储 JSON 数据库
鸿蒙元服务项目实战:备忘录内容编辑开发
富文本内容编辑我们直接使用RichEditor组件即可,最重要的就是参数,value: RichEditorOptions,通过它,我们可以用来设置样式,和获取最后的富文本内容,这一点是很重要的。
鸿蒙元服务项目实战:备忘录内容编辑开发
|
15天前
|
前端开发 API 数据库
鸿蒙开发:异步并发操作
在结合async/await进行使用的时候,有一点需要注意,await关键字必须结合async,这两个是搭配使用的,缺一不可,同步风格在使用的时候,如何获取到错误呢,毕竟没有catch方法,其实,我们可以自己创建try/catch来捕获异常。
鸿蒙开发:异步并发操作
|
15天前
|
API
鸿蒙开发:实现popup弹窗
目前提供了两种方式实现popup弹窗,主推系统实现的方式,几乎能满足我们常见的所有场景,当然了,文章毕竟有限,尽量还是以官网为主。
鸿蒙开发:实现popup弹窗
|
16天前
|
API
鸿蒙开发:自定义一个车牌字母键盘
车牌字母键盘和一般的键盘还有很大区别的,大家可以发现,键盘上是少一个字母的,因为I字母具有混淆性,所以这个字母是不在车牌键盘内的。
鸿蒙开发:自定义一个车牌字母键盘
|
6天前
|
存储 JSON 区块链
【HarmonyOS NEXT开发——ArkTS语言】购物商城的实现【合集】
HarmonyOS应用开发使用@Component装饰器将Home结构体标记为一个组件,意味着它可以在界面构建中被当作一个独立的UI单元来使用,并且按照其内部定义的build方法来渲染具体的界面内容。txt:string定义了一个名为Data的接口,用于规范表示产品数据的结构。src:类型为,推测是用于引用资源(可能是图片资源等)的一种特定类型,用于指定产品对应的图片资源。txt:字符串类型,用于存放产品的文字描述,比如产品名称等相关信息。price:数值类型,用于表示产品的价格信息。
26 5
|
6天前
|
开发工具 开发者 容器
【HarmonyOS NEXT开发——ArkTS语言】欢迎界面(启动加载页)的实现【合集】
从ArkTS代码架构层面而言,@Entry指明入口、@Component助力复用、@Preview便于预览,只是初窥门径,为开发流程带来些许便利。尤其动画回调与Blank组件,细节粗糙,后续定当潜心钻研,力求精进。”,字体颜色为白色,字体大小等设置与之前类似,不过动画配置有所不同,时长为。,不过这里没有看到额外的动画效果添加到这个特定的图片元素上(与前面带动画的元素对比而言)。这是一个显示文本的视图,文本内容为“奇怪的知识”,设置了字体颜色为灰色(的结构体,它代表了整个界面组件的逻辑和视图结构。
27 1

热门文章

最新文章