【仓颉三方库】 数据库驱动——kv4cj

介绍

MMKV 是一个基于 mmap 的高性能 key-value 存储库,主要用于解决 SharedPreferences 存储性能和容量受限的问题

特性

  • 🚀 特性1

    提供MMKV初始化接口

  • 🚀 特性2

    加密key-value

  • 💪 特性3

    存取key-value值

  • 🛠️ 特性4

    获取内存相关信息

  • 🌍 特性5

    清理删除关闭

  • 💡 特性6

    上锁解锁

  • 🚀 特性1

    获取mmkv根路径

  • 🚀 特性2

    备份和恢复mmkv实例

  • 💪 特性3

    内容更改和故障处理

  • 🛠️ 特性4

    log打印处理

  • 🌍 特性5

    检测MMKV文件是否有效

软件架构

源码目录

java 复制代码
.
├─ doc
│  ├─ assets
│  ├─ cjcov
│  └─ feature_api.md
├─ mmkv_cpp
│  ├─ include
│  │  ├─ MemoryFile.h
│  │  ├─ MMBuffer.h
│  │  ├─ MMKV.h
│  │  ├─ MMKVLog.h
│  │  └─ MMKVPredef.h
│  ├─ native-mmkv.cpp
│  └─ native-mmkv.h
├─ README.md
├─ src
│  └─ mmkv
│     ├─ mmkv.cj
│     ├─ MMKVHandler.cj
│     ├─ native.cj
│     └─ util.cj
└─ test
   ├─ HLT
   └─ LLT
  • doc 文档目录,用于存放设计、API接口等文档
  • mmkv_cpp native接口封装
  • src 源码目录
  • test 测试目录

接口说明

主要类和函数接口说明详见 API

使用说明

编译构建

前提:参考 github.com/Tencent/MMK... 官网安装 MMKV,版本为 V1.2.15

MMKV编译

  1. linux 编译

进入MMKV/Core目录,执行下面语句

ini 复制代码
    var=`awk '/add_library.*/{print NR}' CMakeLists.txt` && sed -i ''"$var"',/STATIC/{s/STATIC/SHARED/}' CMakeLists.txt
    cmake -DCMAKE_BUILD_TYPE=Release
    make
  1. winows 编译

下载msys2和mingw64

msys2:github.com/msys2/msys2...

mingw64:github.com/niXman/ming...

将mingw64解压到msys2的根目录

下载cmake:github.com/Kitware/CMa...

将cmake解压到D盘

用mingw64进入MMKV/Core目录,执行下面语句

bash 复制代码
    var=`awk '/add_library.*/{print NR}' CMakeLists.txt` && sed -i ''"$var"',/STATIC/{s/STATIC/SHARED/}' CMakeLists.txt
    sed -i s/%ws/%ls/g MMKV.cpp MemoryFile_Win32.cpp MMKVPredef.h
    "D:\cmake-3.26.3-windows-x86_64\bin\cmake" -DCMAKE_BUILD_TYPE=Release -G "MinGW Makefiles"
    make

kv4cj编译

  1. linux 编译

将上面生成文件 libcore.so,放入根目录的 lib 文件夹下,之后执行

bash 复制代码
    ./build_linux.sh
  1. window编译

将上面生成文件 libcore.dll,放入根目录的 lib 文件夹下,之后执行

markdown 复制代码
    build_win.bat

DD一下: 欢迎大家关注公众号<程序猿百晓生>,可以了解到以下知识点。

erlang 复制代码
`欢迎大家关注公众号<程序猿百晓生>,可以了解到以下知识点。`
1.OpenHarmony开发基础
2.OpenHarmony北向开发环境搭建
3.鸿蒙南向开发环境的搭建
4.鸿蒙生态应用开发白皮书V2.0 & V3.0
5.鸿蒙开发面试真题(含参考答案) 
6.TypeScript入门学习手册
7.OpenHarmony 经典面试题(含参考答案)
8.OpenHarmony设备开发入门【最新版】
9.沉浸式剖析OpenHarmony源代码
10.系统定制指南
11.【OpenHarmony】Uboot 驱动加载流程
12.OpenHarmony构建系统--GN与子系统、部件、模块详解
13.ohos开机init启动流程
14.鸿蒙版性能优化指南
.......

功能示例

initializeMMKV功能示例

功能示例描:设定 MMKV 的根目录

示例代码如下:

testExample1.cj

javascript 复制代码
from  kv4cj import mmkv.*

main() {
	MMKV.initializeMMKV("rootdir")
	return 0
}

编译运行:

css 复制代码
cjc --import-path build -Lbuild/kv4cj -Llib -lcore -lkv4cj_mmkv -lmymmkv testExample1.cj -o main

执行结果如下:

ruby 复制代码
[I] <MMKV.cpp:165::initialize> version v1.2.15, page size 4096, arch x86_64
[I] <MMKV.cpp:208::initializeMMKV> root dir: rootdir

defaultMMKV功能示例

功能示例描述:创建全局的实例

示例代码如下:

testExample2.cj

javascript 复制代码
import kv4cj.*

main() {
	MMKV.initializeMMKV("rootdir")
	var mmkv = MMKV.defaultMMKV()
	return 0
}

编译运行:

css 复制代码
cjc --import-path build -Lbuild/kv4cj -Llib -lcore -lkv4cj_mmkv -lmymmkv testExample2.cj -o main

执行结果如下:

csharp 复制代码
[I] <MMKV.cpp:165::initialize> version v1.2.15, page size 4096, arch x86_64
[I] <MMKV.cpp:208::initializeMMKV> root dir: rootdir
[I] <MemoryFile.cpp:97::open> open fd[0x3], rootdir/mmkv.default
[I] <MemoryFile.cpp:97::open> open fd[0x4], rootdir/mmkv.default.crc
[I] <MMKV_IO.cpp:81::loadFromFile> loading [mmkv.default] with 0 actual size, file size 4096, InterProcess 0, meta info version:0
[I] <MMKV_IO.cpp:130::loadFromFile> loaded [mmkv.default] with 0 key-values

mmkvWithID功能示例

功能示例描述:创建自己的实例

示例代码如下:

testExample3.cj

javascript 复制代码
import kv4cj.*

main() {
    MMKV.initializeMMKV("rootdir")
    var mmkv = MMKV.mmkvWithID("MyID")
    return 0
}

编译运行:

css 复制代码
cjc --import-path build -Lbuild/kv4cj -Llib -lcore -lkv4cj_mmkv -lmymmkv testExample3.cj -o main

执行结果如下:

ruby 复制代码
[I] <MMKV.cpp:165::initialize> version v1.2.15, page size 4096, arch x86_64
[I] <MMKV.cpp:208::initializeMMKV> root dir: rootdir
[I] <MemoryFile.cpp:97::open> open fd[0x3], rootdir/MyID
[I] <MemoryFile.cpp:97::open> open fd[0x4], rootdir/MyID.crc
[I] <MMKV_IO.cpp:81::loadFromFile> loading [MyID] with 133 actual size, file size 4096, InterProcess 0, meta info version:3
[I] <MMKV_IO.cpp:86::loadFromFile> loading [MyID] with crc 621142152 sequence 1 version 3
[I] <MMKV_IO.cpp:130::loadFromFile> loaded [MyID] with 3 key-values

存取key-value

功能示例描述:存取key-value

示例代码如下:

testExample4.cj

kotlin 复制代码
import kv4cj.*

main() {
    MMKV.initializeMMKV("rootdir")
    var kv = MMKV.mmkvWithID("MyID")
    kv.set("bool", true)
    var value = kv.getBool("bool")

    kv.set("int32", 0x11223344)
    var iValue = kv.getInt32("int32")

    kv.set("string", "Hello from mmkv")
    var str = kv.getString("string")

    return 0
}

编译运行:

css 复制代码
cjc --import-path build -Lbuild/kv4cj -Llib -lcore -lkv4cj_mmkv -lmymmkv testExample4.cj -o main

执行结果如下:

ruby 复制代码
[I] <MMKV.cpp:165::initialize> version v1.2.15, page size 4096, arch x86_64
[I] <MMKV.cpp:208::initializeMMKV> root dir: rootdir
[I] <MemoryFile.cpp:97::open> open fd[0x3], rootdir/MyID
[I] <MemoryFile.cpp:97::open> open fd[0x4], rootdir/MyID.crc
[I] <MMKV_IO.cpp:81::loadFromFile> loading [MyID] with 133 actual size, file size 4096, InterProcess 0, meta info version:3
[I] <MMKV_IO.cpp:86::loadFromFile> loading [MyID] with crc 621142152 sequence 1 version 3
[I] <MMKV_IO.cpp:130::loadFromFile> loaded [MyID] with 3 key-values
相关推荐
lili-felicity2 小时前
React Native 鸿蒙跨平台开发:LayoutAnimation 实现鸿蒙端按钮点击的缩放反馈动画
react native·react.js·harmonyos
哈__4 小时前
React Native 鸿蒙跨平台开发:Dimensions 屏幕尺寸获取
react native·华为·harmonyos
奋斗的小青年!!4 小时前
Flutter跨平台开发适配OpenHarmony:手势识别实战应用
flutter·harmonyos·鸿蒙
搬砖的kk5 小时前
Cordova 适配鸿蒙系统(OpenHarmony) 全解析:技术方案、环境搭建与实战开发
华为·开源·harmonyos
不爱吃糖的程序媛5 小时前
OpenHarmony 通用C/C++三方库 标准化鸿蒙化适配
c语言·c++·harmonyos
程序猿追5 小时前
鸿蒙PC应用开发深度实战:一次开发、多端适配的沉浸式音乐播放器迁移实践
华为·harmonyos
行者966 小时前
Flutter跨平台开发:安全检测组件适配OpenHarmony
flutter·harmonyos·鸿蒙
小雨下雨的雨6 小时前
Flutter 框架跨平台鸿蒙开发 —— GridView 控件之多维网格美学
flutter·华为·交互·harmonyos·鸿蒙系统
小雨下雨的雨7 小时前
Flutter跨平台开发实战: 鸿蒙与循环交互艺术:无限循环的 Banner 引擎
flutter·ui·华为·交互·harmonyos·鸿蒙系统
奋斗的小青年!!7 小时前
Flutter与鸿蒙深度融合:打造物理引擎驱动的3D卡片交互体验
flutter·3d·harmonyos·鸿蒙