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

鸿蒙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');}}
}

相关文章:

  • 直线轴承在自动化机械设备中的应用
  • PHP连接MYSQL数据库
  • MCP协议 —— AI世界的“USB-C接口”
  • 本地生活服务信息分类信息系统
  • 10厘米分辨率遥感卫星升空:智慧农业与农业保险的变革与机遇——从SpaceX拼车任务看高精度遥感如何重塑农业未来
  • Redis面试——缓存淘汰和过期删除
  • 深度学习笔记39_Pytorch文本分类入门
  • element-plus添加暗黑模式
  • 【人工智能】DeepSeek 与 RAG 技术:构建知识增强型问答系统的实战
  • 【vLLM 学习】Aqlm 示例
  • 嵌入式ARM RISCV toolchain工具 梳理arm-none-eabi-gcc
  • PHP腾讯云人脸核身获取FaceId
  • 哪种电脑更稳定?Mac?Windows?还是云电脑? 实测解密
  • YOLOv8技术详解:革命性的目标检测算法
  • Spring lazy-init 懒加载的原理
  • Linux 日常运维命令大全
  • Tensorflow释放GPU资源
  • hadoop的三大结构及各自的作用
  • 使用Jasypt对配置文件内容加密
  • 十天借助 Trae 实现 “幸运塔塔屋” 小程序时光记忆功能之旅
  • 言短意长|大学校门到底应不应该开放?
  • 贵州省交通运输厅原副厅长冯伟已任遵义市领导
  • 印尼塔劳群岛发生6.2级地震,震源深度140千米
  • IPO周报|本周暂无新股申购,上周上市新股中签浮盈均超1.6万
  • 承认出现误判,以军公布加沙救护车队遭袭事件调查结果
  • 南方将迎三轮降雨,两广旱区的“解渴雨”也要来了