HarmonyOS--数据持久化--键值型数据库

键值型数据库

场景介绍

键值型数据库存储键值对形式的数据,当需要存储的数据没有复杂的关系模型,比如存储商品名称及对应价格、员工工号及今日是否已出勤等,由于数据复杂度低,更容易兼容不同数据库版本和设备类型,因此推荐使用键值型数据库持久化此类数据。

约束限制

1、设备协同数据库,针对每条记录,Key的长度≤896 Byte,Value的长度<4 MB。

2、单版本数据库,针对每条记录,Key的长度≤1 KB,Value的长度<4 MB。

3、每个应用程序最多支持同时打开16个键值型分布式数据库。

4、键值型数据库事件回调方法中不允许进行阻塞操作,例如修改UI组件。

接口说明

1、创建一个KVManager对象实例,用于管理数据库对象。

createKVManager(config: KVManagerConfig): KVManager

参数:

config:当前UIAbility的上下文、应用唯一标识信息

config参数详情:

const config: distributedKVStore.KVManagerConfig = {context: context,bundleName: 'com.example.datamanagertest'};

调用者:distributedKVStore

2、指定options和storeId,创建并得到指定类型的KVStore数据库。

getKVStore<T>(storeId: string, options: Options, callback: AsyncCallback<T>): void

参数:

storeId:数据库的唯一标识

options:创建数据库时的一些限制信息

callback:创建数据库是否成功,如果成功拿到store信息

options参数详情:

const options: distributedKVStore.Options = {// 当数据库文件不存在时是否创建数据库,默认为truecreateIfMissing: true,// 设置数据库文件是否加密,默认为false,即不加密encrypt: false,// 设置数据库文件是否备份,默认为true,即备份backup: false,// 设置数据库文件是否自动同步。默认为false,即手动同步autoSync: true,// kvStoreType不填时,默认创建多设备协同数据库kvStoreType: distributedKVStore.KVStoreType.SINGLE_VERSION,// 多设备协同数据库:kvStoreType: distributedKVStore.KVStoreType.DEVICE_COLLABORATION,securityLevel: distributedKVStore.SecurityLevel.S1}

调用者:kvManager

3、添加指定类型的键值对到数据库。

put(key: string, value: Uint8Array|string|number|boolean, callback: AsyncCallback<void>): void

参数

key: 添加的key值

value: 注意value值的类型

callback:回调函数

调用者:kvManager

4、获取指定键的值。

get(key: string, callback: AsyncCallback<Uint8Array|string|boolean|number>): void

参数

key:查询的key值

callback:回调函数

调用者:kvManager

5、从数据库中删除指定键值的数据。

delete(key: string, callback: AsyncCallback<void>): void

参数

key:删除的值

调用者:kvManager

封装键值型数据库使用

// 导入模块
import distributedKVStore from '@ohos.data.distributedKVStore';const BUNDLE_NAME = "dbName_tengyu"let context = getContext(this)
// 数据库对象
let kvManager: distributedKVStore.KVManager | undefined = undefined;
// KVStore数据库
let kvStore: distributedKVStore.SingleKVStore | undefined = undefined;class DistributedUtil {constructor() {this.createKeyValueDB();}async getKvManager(bundleName?: string) {const kvStoreConfig: distributedKVStore.KVManagerConfig = {context: context,bundleName: bundleName || BUNDLE_NAME};try {kvManager = distributedKVStore.createKVManager(kvStoreConfig);}catch (err) {console.error(`error:${err}`)}}// 创建并得到指定类型的KVStore数据库async createKeyValueDB(op?: distributedKVStore.Options) {if (kvManager === undefined) {this.getKvManager();}try {const options: distributedKVStore.Options = {// 当数据库文件不存在时是否创建数据库,默认为truecreateIfMissing: true,// 设置数据库文件是否加密,默认为false,即不加密encrypt: false,// 设置数据库文件是否备份,默认为true,即备份backup: false,// 设置数据库文件是否自动同步。默认为false,即手动同步autoSync: true,// kvStoreType不填时,默认创建多设备协同数据库kvStoreType: distributedKVStore.KVStoreType.SINGLE_VERSION,// 多设备协同数据库:kvStoreType: distributedKVStore.KVStoreType.DEVICE_COLLABORATION,securityLevel: distributedKVStore.SecurityLevel.S1};// storeId为数据库唯一标识kvManager.getKVStore<distributedKVStore.SingleKVStore>('storeId', op || options, (err, store: distributedKVStore.SingleKVStore) => {if (err) {console.error(`Failed to get KVStore: Code:${err.code},message:${err.message}`);return;}console.info('Succeeded in getting KVStore.');// 进行相关数据操作kvStore = store;});} catch (e) {console.error(`An unexpected error occurred. Code:${e.code},message:${e.message}`);}return kvStore;}// 删除指定键值的数据async deleteStoreData(key: string) {if (!kvStore) {return;}try {kvStore.delete(key, (err) => {if (err !== undefined) {console.error(`Failed to delete data. Code:${err.code},message:${err.message}`);return;}console.info('Succeeded in deleting data.');});} catch (e) {console.error(`An unexpected error occurred. Code:${e.code},message:${e.message}`);}}// 向键值数据库中插入数据async putStoreData(key: string, value: any) {if (!key || !value) {return}if (!kvStore) {kvStore = await this.createKeyValueDB();}try {kvStore.put(key, value, (err) => {if (err !== undefined) {console.error(`Failed to put data. Code:${err.code},message:${err.message}`);return;}console.info('Succeeded in putting data.');});} catch (e) {console.error(`An unexpected error occurred. Code:${e.code},message:${e.message}`);}}// 获取指定键的值async getStoreData(key: string) {if (!key) {return}if (!kvStore) {kvStore = await this.createKeyValueDB();}return new Promise((resolve, reject) => {try {kvStore.get(key, (err, data) => {if (err != undefined) {console.error(`Failed to get data. Code:${err.code},message:${err.message}`);reject(err)return;}resolve(data)});} catch (err) {reject(err)console.error('TAG', `Failed to get value, Cause: ${err}`)}});}
}export default new DistributedUtil();

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/36459.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微服务框架中的Eureka和Ribbon的个人理解

微服务框架需要学习的东西很多&#xff0c;基本上我把它分为了五个模块&#xff1a; 第一&#xff1a;微服务技术模块 分为三个常用小模块&#xff1a; 1.微服务治理&#xff1a; 注册发现 远程调用 配置管理 网关路由 2.微服务保护&#xff1a; 流量控制 系统保护 熔断降级 服…

springcloud第4季 分布式事务seata实现AT模式案例

一 seata案例 1.1 背景说明 本案例使用seata的at模式&#xff0c;模拟分布式事务场景&#xff1a;【下订单&#xff0c;减库存&#xff0c;扣余额&#xff0c;改状态】 1.2 初始化脚本 1.2.1 新建seata_order_024 库 1.新建undol_log表 -- for AT mode you must to init…

锐捷AP从其它项目拆下,怎么也加入不了到现在这个网络里来

环境: AP 产品型号:RG-RAP2260G 问题描述: 锐捷AP从其它项目拆下,怎么也加入不了到现在这个网络里来,现网是WIFI5的,想把2260G用来升级,恢复出厂设置后,插上网线,现网找不到这个AP 解决方案: 1.通电重置AP后,连接AP WiFi进入管理页面,要求先快速配置 2.开始配置…

MySQL的隔离级别详解

MySQL的隔离级别详解 MySQL是一个广泛使用的关系数据库管理系统&#xff0c;其事务处理能力是其核心功能之一。事务处理中的隔离级别决定了一个事务在读取或写入数据时如何受到其他并发事务的影响。MySQL提供了四种标准的隔离级别&#xff0c;每种隔离级别在性能和一致性之间做…

算法力扣刷题记录十【19.删除链表的倒数第N个节点】

前言 链表练习&#xff0c;继续 题目&#xff1a;力扣【19.删除链表的倒数第N个节点】 题目阅读 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], n 2 输出&#xff1a;[1…

服务器出现意外情况。(Exception from HRESULT: 0x80010105(RPC E SERVERFAULT))

这种情况一般出现在excel2007版本&#xff0c;下载了什么阅读器之类的 2007改不了这个加载项&#xff0c;需要重装一个其他版本&#xff08;2010版本可以&#xff09; 然后如下操作修改为COM加载项

Python湍流隐式模型耗散粘性方程和大涡流模拟

&#x1f3af;要点 &#x1f3af;达朗贝尔一维波动通解&#xff0c;二维变速模拟 | &#x1f3af;达朗贝尔算子解双曲波形微分方程 | &#x1f3af;耗散系统粘性伯格斯方程快速傅里叶变换算法 | &#x1f3af;二维线性和非线性对流扩散解和湍流隐式建模 &#x1f4dc;偏微分方…

笔记:Oracle rman异地恢复小例

安装数据库软件&#xff08;略&#xff09; 修改参数文件 *.audit_file_destD:\app\Administrator\diag\adump *.audit_trailDB *.compatible11.2.0.0.0 *.control_filesD:\oradata\orcl\CONTROL01.CTL *.db_block_size8192 *.db_domain *.db_nameorcl *.db_recovery_file_de…

[行业原型] Web端原型案例:康欣医疗后台管理系统

​医疗管理系统是一个业务复杂&#xff0c;功能庞大的系统&#xff0c;以下为HIS医院管理系统的常见模块&#xff0c;供大家参考。 本周为大家带来Web端原型案例&#xff1a;康欣医疗后台管理系统&#xff0c;先上原型&#xff1a; 完整文档加班主任微信号 添加班主任回复 “1…

Spring boot需要知道的点

一、为什么要用Spring boot Spring Boot 优点非常多&#xff0c;如&#xff1a; 独立运行 Spring Boot 而且内嵌了各种 servlet 容器&#xff0c;Tomcat、Jetty 等&#xff0c;现在不再需要打成 war 包部署到 容器 中&#xff0c;Spring Boot 只要打成一个可执行的 jar 包就能…

8个Unity开发高手都在用的秘密技巧!

1. 不要重新发明轮子&#xff0c;使用内置的引擎工具 在使用任何引擎时&#xff0c;比如Unity或Unreal Engine&#xff0c;一些开发者&#xff0c;主要是来自计算机科学领域的开发者&#xff0c;可能会倾向于从头开始开发大型算法或结构&#xff0c;而不去了解引擎中是否已经存…

我给我的学校写了个校园墙小程序

目录 前言 正文 事先声明 项目介绍 关于Github的一些点 ①贡献值的记录 ②Github中的Project是什么 ③Release和Package有什么区别 ④开源许可证之间的区别 尾声 &#x1f52d; Hi,I’m Pleasure1234&#x1f331; I’m currently learning Vue.js,SpringBoot,Computer Securit…

2024.06.26【读书笔记】|医疗科技创新流程(注重价值与全球视角)【AI增强版】

目录 注重价值 (Focus on Value)价值的定义价值创造的重要性价值实现的挑战实践价值导向的策略 全球视角 (Global Perspectives)全球市场的变化地区分析中国经济与人口背景医疗保健体系市场机遇挑战与应对策略创新与本土化 全球战略考虑全球化带来的机遇与挑战 注重价值 (Focus…

vector的自实现(迭代器失效问题)与继承续讲

引子&#xff1a;在生活中&#xff0c;我们使用vector很频繁&#xff0c;我们是不是可以自己来实现一个呢&#xff1f;&#xff0c;其实也不难&#xff0c;我们在学过数据结构&#xff0c;就很easy啦&#xff01; As we all kowmn,vector基础有以下函数&#xff01; from my …

git 初基本使用-----------笔记(结合idea)

Git命令 下载git 打开Git官网&#xff08;git-scm.com&#xff09;&#xff0c;根据自己电脑的操作系统选择相应的Git版本&#xff0c;点击“Download”。 基本的git命令使用 可以在项目文件下右击“Git Bash Here” &#xff0c;也可以命令终端下cd到指定目录执行初始化命令…

YOLOv1 中的一些计算

YOLOv1 中的一些计算 位置参数计算 在训练过程中&#xff0c;需要分别计算真实框的位置参数 t x t_x tx​、 t y t_y ty​、 w w w、 h h h。 已知真实框的左上角点和右下角点坐标&#xff1a; g t [ x 1 , y 1 , x 2 , y 2 ] gt [x_1, y_1, x_2, y_2] gt[x1​,y1​,x2​…

vue elementui简易侧拉栏的使用

目的&#xff1a; 增加了侧拉栏&#xff0c;目的是可以选择多条数据展示数据 组件&#xff1a; celadon.vue <template><div class"LayoutMain"><el-aside :width"sidebarIsCollapse ? 180px : 0px" class"aside-wrap"><…

【机器学习】深度概率模型(DPM)原理和文本分类实践

1.引言 1.1.DPM模型简介 深度概率模型&#xff08;Deep Probabilistic Models&#xff09; 是结合了深度学习和概率论的一类模型。这类模型通过使用深度学习架构&#xff08;如神经网络&#xff09;来构建复杂的概率分布&#xff0c;从而能够处理不确定性并进行预测。深度概率…

Java是什么?Java三大平台是指什么?Java能做什么?

Java是什么&#xff1f; 在了解“什么是Java”之前&#xff0c;我们先来认识下什么是计算机语言 。计算机语言(Computer Language)是人与计算机之间通信的语言&#xff0c;它主要由一些指令组成&#xff0c;这些指令包括数字、符号和语法 等内容&#xff0c;程序员可以通过这些…

Linux通过expect实现免交互

免交互 Here Document 用于将多行字符串直接传递给命令的方式&#xff0c;不需要人为交互命令界面&#xff0c;实现免交互 当使用Here Document操作文件时&#xff0c;需要借助一个文件结束符 EOF&#xff1a;文件结束符 示例 在脚本文件中写入以下内容 <<&#x…