当前位置: 首页 > java >正文

鸿蒙NEXT开发键值型数据工具类(ArkTs)

import { AppUtil } from './AppUtil';
import { distributedKVStore } from '@kit.ArkData';
import { BusinessError } from '@kit.BasicServicesKit';/*** 键值型数据库工具类* @author CSDN-鸿蒙布道师* @since 2025/04/18*/
export class KvUtil {private static kvStore: distributedKVStore.SingleKVStore; // KVStore数据库实例/*** 获取KVStore数据库实例* @returns Promise<distributedKVStore.SingleKVStore>*/private static async getKvStore(): Promise<distributedKVStore.SingleKVStore> {if (!KvUtil.kvStore) {const kvManager = distributedKVStore.createKVManager({context: AppUtil.getContext(),bundleName: AppUtil.getBundleName(),});const options: distributedKVStore.Options = {createIfMissing: true, // 数据库不存在时是否创建encrypt: true, // 是否加密数据库backup: false, // 是否支持备份autoSync: false, // 是否跨设备自动同步kvStoreType: distributedKVStore.KVStoreType.SINGLE_VERSION, // 数据库类型securityLevel: distributedKVStore.SecurityLevel.S1, // 数据库安全级别};KvUtil.kvStore = await kvManager.getKVStore('harmony_utils_store', options);}return KvUtil.kvStore;}/*** 添加指定类型的键值对到数据库* @param key 键* @param value 值(支持 Uint8Array | string | number | boolean)*/static async put(key: string, value: Uint8Array | string | number | boolean): Promise<void> {const kvStore = await KvUtil.getKvStore();await kvStore.put(key, value);}/*** 获取指定键的值,支持默认值* @param key 键* @param defValue 默认值* @returns Promise<T | undefined>*/private static async getValue<T>(key: string, defValue?: T): Promise<T | undefined> {const kvStore = await KvUtil.getKvStore();try {const value = await kvStore.get(key);// 使用类型断言确保返回值符合 T 类型return (value !== undefined && value !== null ? value as T : defValue);} catch (error) {console.error(`KvUtil-getValue Error: ${error}`);return defValue;}}/*** 获取字符串类型的值* @param key 键* @param defValue 默认值*/static async getString(key: string, defValue = ''): Promise<string> {return (await KvUtil.getValue<string>(key, defValue)) ?? '';}/*** 获取数字类型的值* @param key 键* @param defValue 默认值*/static async getNumber(key: string, defValue = 0): Promise<number> {return (await KvUtil.getValue<number>(key, defValue)) ?? 0;}/*** 获取布尔类型的值* @param key 键* @param defValue 默认值*/static async getBoolean(key: string, defValue = false): Promise<boolean> {return (await KvUtil.getValue<boolean>(key, defValue)) ?? false;}/*** 获取 Uint8Array 类型的值* @param key 键* @param defValue 默认值*/static async getUint8Array(key: string, defValue: Uint8Array = new Uint8Array()): Promise<Uint8Array> {return (await KvUtil.getValue<Uint8Array>(key, defValue)) ?? new Uint8Array();}/*** 删除指定键的值* @param key 键*/static async delete(key: string): Promise<void> {const kvStore = await KvUtil.getKvStore();await kvStore.delete(key);}/*** 批量插入键值对* @param entries 键值对数组*/static async putBatch(entries: distributedKVStore.Entry[]): Promise<void> {const kvStore = await KvUtil.getKvStore();await kvStore.putBatch(entries);}/*** 批量删除键值对* @param keys 键数组*/static async deleteBatch(keys: string[]): Promise<void> {const kvStore = await KvUtil.getKvStore();await kvStore.deleteBatch(keys);}/*** 获取匹配指定键前缀的所有键值对* @param keyPrefix 键前缀*/static async getEntries(keyPrefix: string): Promise<distributedKVStore.Entry[]> {const kvStore = await KvUtil.getKvStore();return kvStore.getEntries(keyPrefix);}/*** 备份数据库* @param file 备份文件名*/static async backup(file: string): Promise<void> {const kvStore = await KvUtil.getKvStore();await kvStore.backup(file);}/*** 恢复数据库* @param file 备份文件名*/static async restore(file: string): Promise<void> {const kvStore = await KvUtil.getKvStore();await kvStore.restore(file);}/*** 删除备份文件* @param files 备份文件名数组*/static async deleteBackup(files: string[]): Promise<Array<[string, number]>> {const kvStore = await KvUtil.getKvStore();return kvStore.deleteBackup(files);}/*** 订阅数据变更通知* @param type 订阅类型* @param listener 回调函数*/static async onDataChange(type: distributedKVStore.SubscribeType,listener: Callback<distributedKVStore.ChangeNotification>): Promise<void> {const kvStore = await KvUtil.getKvStore();kvStore.on('dataChange', type, listener);}/*** 取消订阅数据变更通知* @param listener 回调函数(不传则取消所有订阅)*/static async offDataChange(listener?: Callback<distributedKVStore.ChangeNotification>): Promise<void> {const kvStore = await KvUtil.getKvStore();if (listener) {kvStore.off('dataChange', listener);} else {kvStore.off('dataChange');}}
}

代码如下:

import { AppUtil } from './AppUtil';
import { distributedKVStore } from '@kit.ArkData';
import { BusinessError } from '@kit.BasicServicesKit';/*** 键值型数据库工具类* @author CSDN-鸿蒙布道师* @since 2025/04/18*/
export class KvUtil {private static kvStore: distributedKVStore.SingleKVStore; // KVStore数据库实例/*** 获取KVStore数据库实例* @returns Promise<distributedKVStore.SingleKVStore>*/private static async getKvStore(): Promise<distributedKVStore.SingleKVStore> {if (!KvUtil.kvStore) {const kvManager = distributedKVStore.createKVManager({context: AppUtil.getContext(),bundleName: AppUtil.getBundleName(),});const options: distributedKVStore.Options = {createIfMissing: true, // 数据库不存在时是否创建encrypt: true, // 是否加密数据库backup: false, // 是否支持备份autoSync: false, // 是否跨设备自动同步kvStoreType: distributedKVStore.KVStoreType.SINGLE_VERSION, // 数据库类型securityLevel: distributedKVStore.SecurityLevel.S1, // 数据库安全级别};KvUtil.kvStore = await kvManager.getKVStore('harmony_utils_store', options);}return KvUtil.kvStore;}/*** 添加指定类型的键值对到数据库* @param key 键* @param value 值(支持 Uint8Array | string | number | boolean)*/static async put(key: string, value: Uint8Array | string | number | boolean): Promise<void> {const kvStore = await KvUtil.getKvStore();await kvStore.put(key, value);}/*** 获取指定键的值,支持默认值* @param key 键* @param defValue 默认值* @returns Promise<T | undefined>*/private static async getValue<T>(key: string, defValue?: T): Promise<T | undefined> {const kvStore = await KvUtil.getKvStore();try {const value = await kvStore.get(key);// 使用类型断言确保返回值符合 T 类型return (value !== undefined && value !== null ? value as T : defValue);} catch (error) {console.error(`KvUtil-getValue Error: ${error}`);return defValue;}}/*** 获取字符串类型的值* @param key 键* @param defValue 默认值*/static async getString(key: string, defValue = ''): Promise<string> {return (await KvUtil.getValue<string>(key, defValue)) ?? '';}/*** 获取数字类型的值* @param key 键* @param defValue 默认值*/static async getNumber(key: string, defValue = 0): Promise<number> {return (await KvUtil.getValue<number>(key, defValue)) ?? 0;}/*** 获取布尔类型的值* @param key 键* @param defValue 默认值*/static async getBoolean(key: string, defValue = false): Promise<boolean> {return (await KvUtil.getValue<boolean>(key, defValue)) ?? false;}/*** 获取 Uint8Array 类型的值* @param key 键* @param defValue 默认值*/static async getUint8Array(key: string, defValue: Uint8Array = new Uint8Array()): Promise<Uint8Array> {return (await KvUtil.getValue<Uint8Array>(key, defValue)) ?? new Uint8Array();}/*** 删除指定键的值* @param key 键*/static async delete(key: string): Promise<void> {const kvStore = await KvUtil.getKvStore();await kvStore.delete(key);}/*** 批量插入键值对* @param entries 键值对数组*/static async putBatch(entries: distributedKVStore.Entry[]): Promise<void> {const kvStore = await KvUtil.getKvStore();await kvStore.putBatch(entries);}/*** 批量删除键值对* @param keys 键数组*/static async deleteBatch(keys: string[]): Promise<void> {const kvStore = await KvUtil.getKvStore();await kvStore.deleteBatch(keys);}/*** 获取匹配指定键前缀的所有键值对* @param keyPrefix 键前缀*/static async getEntries(keyPrefix: string): Promise<distributedKVStore.Entry[]> {const kvStore = await KvUtil.getKvStore();return kvStore.getEntries(keyPrefix);}/*** 备份数据库* @param file 备份文件名*/static async backup(file: string): Promise<void> {const kvStore = await KvUtil.getKvStore();await kvStore.backup(file);}/*** 恢复数据库* @param file 备份文件名*/static async restore(file: string): Promise<void> {const kvStore = await KvUtil.getKvStore();await kvStore.restore(file);}/*** 删除备份文件* @param files 备份文件名数组*/static async deleteBackup(files: string[]): Promise<Array<[string, number]>> {const kvStore = await KvUtil.getKvStore();return kvStore.deleteBackup(files);}/*** 订阅数据变更通知* @param type 订阅类型* @param listener 回调函数*/static async onDataChange(type: distributedKVStore.SubscribeType,listener: Callback<distributedKVStore.ChangeNotification>): Promise<void> {const kvStore = await KvUtil.getKvStore();kvStore.on('dataChange', type, listener);}/*** 取消订阅数据变更通知* @param listener 回调函数(不传则取消所有订阅)*/static async offDataChange(listener?: Callback<distributedKVStore.ChangeNotification>): Promise<void> {const kvStore = await KvUtil.getKvStore();if (listener) {kvStore.off('dataChange', listener);} else {kvStore.off('dataChange');}}
}

http://www.xdnf.cn/news/180.html

相关文章:

  • PyTorch快速入门
  • 《软件设计师》复习笔记(12.1)——范围管理、进度管理
  • 全栈架构设计图
  • 浅谈验证(Verification)和确认(Validation)
  • 基于C++(MFC)图形编辑界面工具
  • 数据驱动、精准协同:高端装备制造业三位一体生产管控体系构建
  • QT中栅格模式探索
  • mybatisFlex各种链式sql写法
  • Android平台 Hal AIDL 系列文章目录
  • git常用的命令
  • 大模型相关面试问题原理及举例
  • Ubuntu 系统中修改 MySQL 的 sql_mode
  • C++ STL编程-vector概念、对象创建
  • Android audio系统六 AudioEffect音效加载
  • 51单片机实验二:数码管静态显示
  • Vue Teleport 及其在 SSR 中的潜在问题
  • leetcode 2364. 统计坏数对的数目 中等
  • 在windows上交叉编译opencv供RK3588使用
  • 嵌入式linux架构理解(宏观理解)6ull学习心得---从架构理解到自写程序运行及自写程序开机自启动
  • #Linux动态大小裁剪以及包大小变大排查思路
  • 淘宝商品图片API安全调用指南:签名生成与错误处理机制
  • 从右到左 vs 从左到右:字符串转整数的两种方式
  • Web 前端包管理工具深度解析:npm、yarn、pnpm 全面对比与实战建议
  • 图+文+语音一体化:多模态合成数据集构建的实战与方法论
  • wordpress 垂直越权(CVE=2021-21389)漏洞复现详细教程
  • PHP腾讯云人脸核身获取FaceId
  • 《AI大模型应知应会100篇》第24篇:限定输出格式:如何让AI回答更加结构化
  • GCD算法的学习
  • 第三阶段面试题
  • Git常用命令分类汇总