【鸿蒙】单版本分布式数据库实战

简介: 周末如期而至,学习也不能停止,分布式数据库实战搞起!1).要使用分布式的化首先就得打开权限,在config.json中添加permisssion权限。

周末如期而至,学习也不能停止,分布式数据库实战搞起!

1).要使用分布式的化首先就得打开权限,在config.json中添加permisssion权限。

"reqPermissions": [{
      "name": "ohos.permission.DISTRIBUTED_DATASYNC"
    }
    ],

这段代码添加在abilities同一目录层级

2).再将权限调用放在onstart方法里面


requestPermissionsFromUser(new String[]{"ohos.permission.DISTRIBUTED_DATASYNC"},0);

1.UI布局

默认文件ability_main的xml代码,五个按钮

<?xml version="1.0" encoding="utf-8"?>
<DirectionalLayout
    xmlns:ohos="http://schemas.huawei.com/res/ohos"
    ohos:height="match_parent"
    ohos:width="match_parent"
    ohos:background_element="#FF34D2BA"
    ohos:orientation="vertical">
    <DependentLayout
        ohos:height="50vp"
        ohos:width="match_parent"
        ohos:left_margin="30vp"
        ohos:right_margin="30vp"
        ohos:top_margin="30vp"
        ohos:background_element="$graphic:background">
        <Button
            ohos:height="match_content"
            ohos:width="match_parent"
            ohos:id="$+id:write_button"
            ohos:text="分布式写数据"
            ohos:text_size="20vp"
            ohos:text_color="#9b9b9b"
            ohos:top_padding="10vp"
            />
    </DependentLayout>
    <DependentLayout
    ohos:height="50vp"
    ohos:width="match_parent"
    ohos:left_margin="30vp"
    ohos:right_margin="30vp"
    ohos:top_margin="30vp"
    ohos:background_element="$graphic:background">
    <Button
        ohos:height="match_content"
        ohos:width="match_parent"
        ohos:id="$+id:delete_button"
        ohos:text="分布式删除数据"
        ohos:text_color="#9b9b9b"
        ohos:text_size="20vp"
        ohos:top_padding="10vp"
        />
    </DependentLayout>
    <DependentLayout
    ohos:height="50vp"
    ohos:width="match_parent"
    ohos:left_margin="30vp"
    ohos:right_margin="30vp"
    ohos:top_margin="30vp"
    ohos:background_element="$graphic:background">
    <Button
    ohos:height="match_content"
    ohos:width="match_parent"
    ohos:id="$+id:read_button"
    ohos:text="分布式读取数据"
    ohos:text_color="#9b9b9b"
    ohos:text_size="20vp"
    ohos:top_padding="10vp"
        />
    </DependentLayout>
    <DependentLayout
        ohos:height="50vp"
        ohos:width="match_parent"
        ohos:left_margin="30vp"
        ohos:right_margin="30vp"
        ohos:top_margin="30vp"
        ohos:background_element="$graphic:background">
        <Button
            ohos:height="match_content"
            ohos:width="match_parent"
            ohos:id="$+id:close_button"
            ohos:text="分布式关闭数据"
            ohos:text_color="#9b9b9b"
            ohos:text_size="20vp"
            ohos:top_padding="10vp"
            />
    </DependentLayout>
    <DependentLayout
        ohos:height="50vp"
        ohos:width="match_parent"
        ohos:left_margin="30vp"
        ohos:right_margin="30vp"
        ohos:top_margin="30vp"
        ohos:background_element="$graphic:background">
        <Button
            ohos:height="match_content"
            ohos:width="match_parent"
            ohos:id="$+id:del_button"
            ohos:text="删除分布式数据库"
            ohos:text_color="#9b9b9b"
            ohos:text_size="20vp"
            ohos:top_padding="10vp"
            />
    </DependentLayout>
</DirectionalLayout>

包括按钮的形状

<?xml version="1.0" encoding="UTF-8" ?>
<shape xmlns:ohos="http://schemas.huawei.com/res/ohos"
       ohos:shape="rectangle">
    <solid ohos:color="#ffffff"/>
    <stroke ohos:width="3vp"
            ohos:color="#ffffff"
            />
    <corners ohos:radius="20vp"/>
</shape>


2.注入灵魂

Ctrl c+v一顿操作




我们可以看一看options当中的默认值



然后随便打印几个出来


接下来就自定义,有的不需要默认值,我们就修改

 options.setCreateIfMissing(true)
         .setEncrypt(false)
         .setKvStoreType(KvStoreType.SINGLE_VERSION);

响应代码

public void onClick(Component component) {
            int componentId = component.getId();
            switch (componentId) {
                case ResourceTable.Id_write_button: {
                    //写入数据
                    try {
                        singleKvStore.putString("test", "wo ai huawei");
                        System.out.println("======写入数据");
                        Tools.showTip(MainAbilitySlice.this,"写入数据成功");
                    }catch (Exception e){
                        e.printStackTrace();
                    }
                }
                break;
                case ResourceTable.Id_del_button: {
                    //删除数据
                    try {
                        singleKvStore.delete("test");
                        System.out.println("======删除数据");
                        Tools.showTip(MainAbilitySlice.this,"写入数据成功");
                    }catch (Exception e){
                        e.printStackTrace();
                    }
                }
                break;
                case ResourceTable.Id_read_button: {
                    //读出数据
                    try {
                        singleKvStore.getString("test");
                        System.out.println("======读取数据");
                        Tools.showTip(MainAbilitySlice.this,"读取数据成功");
                    }catch (Exception e){
                        e.printStackTrace();
                    }
                }
                break;
                case ResourceTable.Id_close_button: {
                    //关闭数据库
                    try {
                        kvManager.closeKvStore(singleKvStore);
                        System.out.println("======关闭数据库");
                        Tools.showTip(MainAbilitySlice.this,"关闭数据库成功");
                    }catch (Exception e){
                        e.printStackTrace();
                    }
                }
                break;
                case ResourceTable.Id_delete_button: {
                    //删除数据库
                    try {
                        kvManager.deleteKvStore(stroeId);
                        System.out.println("======删除数据库");
                        Tools.showTip(MainAbilitySlice.this,"删除数据库成功");
                    }catch (Exception e){
                        e.printStackTrace();
                    }
                }
                break;
                default:
                    break;
            }
        }

启动第一部


启动第二部




动图演示,在一台设备写入数据,另一台能够读取,删除则无法读取


9e28e27444674d69a72b50ebd4357582.gif

目录
打赏
0
0
0
0
0
分享
相关文章
一文彻底拿下HarmonyOS NEXT开发实战调试技巧
这是一篇关于HarmonyOS NEXT开发调试技巧的文章,作者是一名经验丰富的程序员Feri。内容涵盖三种调试方法:预览+日志方式(适合简单调试,需注意数据类型转换)、断点调试(详细介绍了设置步骤与功能键使用)以及hilog实战使用(日志打印限制为4096字节,推荐封装维护)。通过这些技巧,帮助开发者更高效地解决问题,提升编程能力。
63 14
一文彻底拿下HarmonyOS NEXT开发实战调试技巧
HarmonyOS Next~鸿蒙应用框架开发实战:Ability Kit与Accessibility Kit深度解析
本书深入解析HarmonyOS应用框架开发,聚焦Ability Kit与Accessibility Kit两大核心组件。Ability Kit通过FA/PA双引擎架构实现跨设备协同,支持分布式能力开发;Accessibility Kit提供无障碍服务构建方案,优化用户体验。内容涵盖设计理念、实践案例、调试优化及未来演进方向,助力开发者打造高效、包容的分布式应用,体现HarmonyOS生态价值。
59 27
HarmonyOS NEXT 实战系列09-生命周期
页面与组件生命周期介绍:页面生命周期(@Entry装饰)包含onPageShow、onPageHide、onBackPress等接口,分别在页面显示、隐藏和返回按钮点击时触发;组件生命周期(@Component装饰)包含aboutToAppear和aboutToDisappear,在组件创建与销毁时回调。示例代码展示了生命周期函数的使用场景及执行时机,帮助开发者更好地管理页面和组件状态。
HarmonyOS NEXT 实战系列09-生命周期
HarmonyOS NEXT 实战系列10-网络通信
本文介绍了网络通信相关知识,包括HTTP协议的工作原理、鸿蒙系统中HTTP模块的使用方法、Promise异步操作处理机制及async/await语法糖的应用,以及JSON数据格式的语法规则与转换方法。重点讲解了HTTP请求响应流程、鸿蒙开发中的网络权限申请与代码实现、Promise三种状态及创建方式,并通过示例说明异步编程技巧和JSON在数据传递中的应用。
45 10
百万指标,秒级查询,零宕机——时序数据库 TDengine 在 AIOps 中的硬核实战
本篇文章详细讲述了七云团队在运维平台中如何利用 TDengine 解决海量时序数据存储与查询的实际业务需求。内容涵盖了从数据库选型、方案落地到业务挑战及解决办法的完整过程,特别是分享了升级 TDengine 3.x 时的实战经验,给到有需要的小伙伴参考阅读。
25 1
|
10天前
|
HarmonyOS NEXT 实战系列-综合案例新闻页
本示例展示了如何通过 `ForEach` 遍历数据并结合 HTTP 请求动态渲染新闻列表。首先定义了 `News` 接口描述数据结构,接着在组件中使用 `List` 和 `ForEach` 渲染新闻项,包含标题、来源、评论数、时间和图片等信息。同时,通过 `http.createHttp()` 获取远程数据并更新列表。代码结构清晰,适配动态数据展示需求。
鸿蒙相机开发实战:从设备适配到性能调优 —— 我的 ArkTS 录像功能落地手记(API 15)
本文分享鸿蒙相机开发经验,从环境准备到核心逻辑实现,涵盖权限声明、模块导入、Surface关联与分辨率匹配,再到录制控制及设备适配法则。通过实战案例解析,如旋转补偿、动态帧率调节和编解码优化,帮助开发者掌握功能实现、设备适配与体验设计三大要点,减少开发坑点。适合鸿蒙新手及希望深化硬件交互能力的工程师参考收藏。
34 2
HarmonyOS NEXT 实战系列01-ArkTS基础
ArkTS是HarmonyOS应用开发的首选语言,基于TypeScript扩展而成,保留了TS风格并强化静态检查与分析能力,提升程序稳定性和性能。它支持声明式UI开发、状态管理等功能,简化应用构建。语法涵盖变量、常量、数组、对象、语句(如if、switch)、函数(含箭头函数与泛型)、类和模块等特性,同时提供联合类型、字面量联合类型及枚举类型等丰富类型支持,助力开发者高效编写高质量代码。
HarmonyOS NEXT 实战系列05-案例回关粉丝
本文介绍了一个基于HarmonyOS的组件化设计案例,通过提取 `FansItemComp` 组件实现复用,使用 `@Prop` 动态接收数据渲染UI。示例中包含关注与互关功能:父组件 `TestPage` 提供粉丝列表数据,封装 `getFansAndFollowCount` 方法统计互关人数;子组件通过按钮交互更新关注状态,并利用 `onChange` 回调通知父组件同步数据变化。代码结构清晰,展示了组件间通信及动态渲染的实现方式。

热门文章

最新文章