[openharmony] kv键值数据库的简单封装 原创

第一小趴菜
发布于 2025-6-24 18:15
浏览
0收藏

前言

现在网上虽然有关于kv键值数据库的封装案例,但是和我需要的有点差距,所以我重新封装了一个

源码

源码如下

import { distributedKVStore } from '@kit.ArkData';
import { bundleManager } from '@kit.AbilityKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { BusinessError } from '@kit.BasicServicesKit';

const TAG = "[sqlutil]"

export default class KVUtils {
  private kvManager: distributedKVStore.KVManager | undefined = undefined;
  private context = getContext(this);
  private kvStore: distributedKVStore.SingleKVStore | undefined = undefined;
  private bundleName: string = 'com.zzx.aaaatest';

  constructor() {
    let bundleFlags = bundleManager.BundleFlag.GET_BUNDLE_INFO_DEFAULT;
    bundleManager.getBundleInfoForSelf(bundleFlags, (err, data) => {
      this.bundleName = data.name;
      const kvManagerConfig: distributedKVStore.KVManagerConfig = {
        context: this.context,
        bundleName: this.bundleName
      };
      this.kvManager = distributedKVStore.createKVManager(kvManagerConfig);
      const options: distributedKVStore.Options = {
        createIfMissing: true, //数据库文件不存在时是否创建数据库
        backup: false, //是否备份数据库文件
        autoSync: false, //是否自动同步
        kvStoreType: distributedKVStore.KVStoreType.SINGLE_VERSION, //数据库类型
        encrypt: true, //是否加密
        securityLevel: distributedKVStore.SecurityLevel.S1//安全等级
      };
      //获取kvStore实例
      this.kvManager.getKVStore<distributedKVStore.SingleKVStore>(`harmony_utils_store`, options,
        (err, store: distributedKVStore.SingleKVStore) => {
          if (err) {
            //获取失败
            return;
          }
          //获取成功
          this.kvStore = store;
        });
    })
  }

  //向数据库中写入数据
  async put(key: string, value: string | number | boolean) {
    this.kvStore!.put(key, value, (err: BusinessError) => {
      if (err != undefined) {
        console.error(TAG, `Failed to put.code is ${err.code},message is ${err.message}`);
        return;
      }
      console.info(TAG, "Succeeded in putting");
    });
  }

  async get(key: string): Promise<boolean | string | number | Uint8Array | null> {
    try {
      const data = await this.kvStore!.get(key);
      console.info(TAG, `Succeeded in getting data.data=${data}`);
      return data;
    } catch (err) {
      const error = err as BusinessError;
      console.error(TAG, `Failed to get. code is ${error.code}, message is ${error.message}`);
      return null;
    }
  }
  
  //删除key对应的数据
  delete(key: string) {
    this.kvStore!.delete(key, (err) => {
      if (err !== undefined) {
        hilog.error(0x0000, 'KVUtils', `Failed to delete data. Code:${err.code},message:${err.message}`);
        return;
      }
      hilog.info(0x0000, 'KVUtils', 'Succeeded in deleting data.');
    });
  }
}

export let kvUtil = new KVUtils()

使用

在需要使用的页面中直接导入

import { kvUtil } from './sqlutil';

Button("存入")
  .onClick(() => {
    kvUtil.put("name","xiaopacai")
  })
Button("取出")
  .onClick(async () => {
    let data =await kvUtil.get("name")
    console.log("name:",data)
    this.text =`${data}`
  })

使用效果

终端打印:
[openharmony] kv键值数据库的简单封装-鸿蒙开发者社区
手机屏幕:
[openharmony] kv键值数据库的简单封装-鸿蒙开发者社区

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
收藏
回复
举报
2条回复
按时间正序
/
按时间倒序
小卓爱喂猫
小卓爱喂猫

手动同步到其他设备的有封装嘛


回复
2025-8-20 14:59:25
第一小趴菜
第一小趴菜 回复了 小卓爱喂猫
手动同步到其他设备的有封装嘛

这个暂时还没有

回复
2025-8-25 11:24:00
回复
    相关推荐