鸿蒙开发:实现键值数据库存储
前言
鸿蒙当中数据持久化存储,为我们提供了多种的实现方式,比如用户首选项方式,关系型数据库方式,键值型数据库方式,文件存储方式等等,对于数据量比较的小的,我们直接选择轻量级的用户首选项方式即可,而对于数据量比较大的情况下,直接可以使用数据库,而对于相对来说,比较大的数据,我们就可以使用键值型数据库方式,它是一种介于用户首选项和关系型数据库之间的数据存储方式。
键值型数据库,使用起来是非常的简单的,从字面意思就能知道,它是以键值对的形式进行数据存储和获取的,和用户首选项有着类似的使用方式,但是键值型数据库方式有着自身的限制性因素,第一个就是针对每条记录,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") //和之前保持一致,执行各种的方法即可。
相关文章:
鸿蒙开发:实现键值数据库存储
前言 鸿蒙当中数据持久化存储,为我们提供了多种的实现方式,比如用户首选项方式,关系型数据库方式,键值型数据库方式,文件存储方式等等,对于数据量比较的小的,我们直接选择轻量级的用户首选项方式…...
WebGL 实践(一)开发环境搭建
WebGL 是一种基于 JavaScript 的 API,用于在浏览器中渲染 2D和3D 图形,很多场景都能用,例如游戏开发、数据可视化、在线教育和虚拟现实等应用领域。 零、基础知识 相关基础知识很重要,如果会html、JavaScript等技术掌握起来会更…...
在线机考|2024华为实习秋招春招编程题(最新)——第3题_PCB印刷电路板布线_300分(八)
题目内容 在PCB印刷电路板设计中,器件之间的连线需要避免线路的阻抗值增大、而且赛件之间还有别的器件和别的干扰源,在布线时我们希望受到的干扰尽量小。现将电路板简化成一个MN的矩阵,每个位置(单元格)的值表示其源干扰度。 如果单元格的值为0,表示此位置没有干扰源;如果单…...
Spring源码分析之事件机制——观察者模式(三)
目录 自定义事件 事件监听器 事件发布者(服务层) 使用示例controller层 Spring源码分析之事件机制——观察者模式(一)-CSDN博客 Spring源码分析之事件机制——观察者模式(二)-CSDN博客 这两篇文章是这…...
C#实现画图,及实现图像运动,C#中GDI+图形图像技术(Graphics类、Pen类、Brush类)C#之快速入门GDI+绘图 C#实现快速画图功能
下载源码 <-------- 在C#的世界里,GDI如同一位多才多艺的艺术家,以其强大的绘图能力,让开发者能够轻松地在应用程序中挥洒创意,绘制出丰富多彩的图形世界。GDI不仅支持基本的几何图形绘制,还能处理复杂的图像处理任…...
【51单片机零基础-chapter6:LCD1602调试工具】
实验0-用显示屏LCD验证自己的猜想 如同c的cout,前端的console.log() #include <REGX52.H> #include <INTRINS.H> #include "LCD1602.h" int var0; void main() {LCD_Init();LCD_ShowNum(1,1,var211,5);while(1){;} }实验1-编写LCD1602液晶显示屏驱动函…...
算法题(24):只出现一次的数字(二)
审题: 数组中除了答案元素只出现一次外,其他元素都会出现三次,我们需要找到并返回答案元素 思路: 由于现在会出现三次,所以利用异或运算符的方法就会失效。而所有数据都在32位二进制范围内,所以我们采用依次…...
趣味编程:心形曲线
目录 1.序言 2.代码展示 3.代码详解 3.1 头文件包含 3.2 绘制坐标轴函数 3.3 main 函数主体部分 4. 小结 1.序言 2025年的第一篇博客就用这个笛卡尔心形图开篇吧,寓意着新年大家能够有心有所属,祝诸位程序猿 / 程序媛 能够早点遇到自己的另一半。…...
C# 设计模式(结构型模式):享元模式
C# 设计模式(结构型模式):享元模式 (Flyweight Pattern) 在软件开发中,尤其是在处理大量对象时,我们常常会面临内存和性能上的挑战。当多个对象具有相似的状态时,通常会占用大量的内存资源,从而…...
计算机毕业设计Django+Tensorflow音乐推荐系统 音乐可视化 卷积神经网络CNN LSTM音乐情感分析 机器学习 深度学习 Flask
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
mysql 死锁案例及简略分析
准备数据 # 创一个测试表,存储引擎使用 innodb create table test_lock (id int primary key auto_increment,name varchar(20),age int )engine innodb;insert into test_lock (name,age) values (ionc001,10); insert into test_lock (name,age) values (ionc00…...
第四届计算机、人工智能与控制工程
第四届计算机、人工智能与控制工程 The 4th International Conference on Computer, Artificial Intelligence and Control Engineering 重要信息 大会官网:www.ic-caice.net 大会时间:2025年1月10-12日 大会地点:中国合肥 (安徽大学磬苑…...
RIP配置实验
RIP配置实验 案例简介 天一公司下属三个分公司,属于不同的地区,三个公司之间用路由器连接,路由器名称分别为分别为 Router0、Router1、Router2,请把一公司的部门pc0,通过二公司路由器,连接三公司的部门pc1,公司之间通…...
C# 整型、浮点型 数值范围原理分析
总目录 前言 一、整型、浮点型 数值范围列表 二、什么是大小、范围 在上面的列表中,每个数据类型都有自己的Range (范围) 和 Size (大小)。 1. 范围 范围好理解,就是对应数据类型的数据范围,如 sbtyte 的数据范围是 -128~127,超…...
Adobe Acrobat Pro DC 2023 下载安装教程,附详细图文
简介: Adobe Acrobat Pro DC 2023 是由 Adobe 公司推出的一款全面的 PDF 编辑、查看和管理软件。这款软件无论是个人用户还是企业级用户,都可以凭借其强大的功能满足不同的需求。作为一款业内领先的 PDF 处理工具,Adobe Acrobat Pro DC 不仅…...
stable diffusion秋叶启动器安装roop插件
方法简洁明了: 第一步:下载秋叶启动器 第二步:输入网址:https://visualstudio.microsoft.com/zh-hans/downloads/,下载vs安装程序,安装开始会自动弹出如下窗口,选择2个环境:Python开…...
7-14 统计工龄
给定公司多名员工的工龄,按输入工龄顺序输出每个工龄段有多少员工。 输入格式: 给出多个整数,即每个员工的工龄,范围在[0, 50]。 输出格式: 按输入工龄顺序输出每个工龄的员工个数,格式为:“工龄:人数”。 每项占一…...
OLED的显示
一、I2C I2C时序:时钟线SCL高电平下:SDA由高变低代表启动信号,开始发送数据;SCL高电平时,数据稳定,数据可以被读走,开始进行读操作,SCL低电平时,数据发生改变࿱…...
本地测试文件解析
PostMapping("/test") public void test() throws IOException {Path csvFile Paths.get("D:\\test/27.csv");//虚拟机退出时删除临时文件csvFile.toFile().deleteOnExit();List<String> list Files.readAllLines(csvFile, Charset.forName("…...
Elasticsearch JavaRestClient版
文章目录 初始化RestHighLeveClient(必要条件)索引库操作1.创建索引库(4步)2.删除索引库(3步)3.判断索引库是否存在(3步)4.总结:四步走 文档操作1.创建文档(4…...
AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...
深入理解JavaScript设计模式之单例模式
目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式(Singleton Pattern&#…...
【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)
可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...
如何将联系人从 iPhone 转移到 Android
从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...
数据链路层的主要功能是什么
数据链路层(OSI模型第2层)的核心功能是在相邻网络节点(如交换机、主机)间提供可靠的数据帧传输服务,主要职责包括: 🔑 核心功能详解: 帧封装与解封装 封装: 将网络层下发…...
css的定位(position)详解:相对定位 绝对定位 固定定位
在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...
力扣-35.搜索插入位置
题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...
管理学院权限管理系统开发总结
文章目录 🎓 管理学院权限管理系统开发总结 - 现代化Web应用实践之路📝 项目概述🏗️ 技术架构设计后端技术栈前端技术栈 💡 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 🗄️ 数据库设…...
从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践
作者:吴岐诗,杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言:融合数据湖与数仓的创新之路 在数字金融时代,数据已成为金融机构的核心竞争力。杭银消费金…...
Unity中的transform.up
2025年6月8日,周日下午 在Unity中,transform.up是Transform组件的一个属性,表示游戏对象在世界空间中的“上”方向(Y轴正方向),且会随对象旋转动态变化。以下是关键点解析: 基本定义 transfor…...
