[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}`
})
使用效果
终端打印:
手机屏幕:
©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
赞
收藏
回复
相关推荐
手动同步到其他设备的有封装嘛
这个暂时还没有