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

第一小趴菜
发布于 2025-6-24 18:15
1.4w浏览
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()

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.

使用

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

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}`
  })
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.

使用效果

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

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

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


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

这个暂时还没有

回复
2025-8-25 11:24:00


回复
    相关推荐