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

简介: 周末如期而至,学习也不能停止,分布式数据库实战搞起!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

相关文章
|
29天前
|
SQL 关系型数据库 MySQL
乐观锁在分布式数据库中如何与事务隔离级别结合使用
乐观锁在分布式数据库中如何与事务隔离级别结合使用
|
12天前
|
存储 调度 数据安全/隐私保护
鸿蒙Flutter实战:13-鸿蒙应用打包上架流程
鸿蒙应用打包上架流程包括创建应用、打包签名和上传应用。首先,在AppGallery Connect中创建项目、APP ID和元服务。接着,使用Deveco进行手动签名,生成.p12和.csr文件,并在AppGallery Connect中上传CSR文件获取证书。最后,配置签名并打包生成.app文件,上传至应用市场。常见问题包括检查签名配置文件是否正确。参考资料:[应用/服务签名](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/ide-signing-V5)。
39 3
鸿蒙Flutter实战:13-鸿蒙应用打包上架流程
|
12天前
|
开发工具 芯片 开发者
鸿蒙Flutter实战:12-使用模拟器开发调试
本文介绍了如何在 M 系列芯片的 Mac 电脑上使用模拟器进行鸿蒙 Flutter 开发和调试。主要内容包括:创建 Flutter 项目、签名、创建模拟器、运行 Flutter 项目以及常见问题的解决方法。适用于希望在鸿蒙系统上开发 Flutter 应用的开发者。
29 2
鸿蒙Flutter实战:12-使用模拟器开发调试
|
18天前
|
IDE 开发工具
鸿蒙Flutter实战:11-使用 Flutter SDK 3.22.0
本文介绍了如何使用 Flutter SDK 3.22.0 搭建鸿蒙开发环境。首先安装 Flutter SDK 3.22.0,并通过 FVM 管理多个版本。接着配置项目,使用 `fvm use custom_3.22.0` 设置自定义 SDK 版本。添加鸿蒙平台支持并进行项目签名,最后通过 `fvm flutter run` 运行项目。详细步骤包括安装、项目配置、签名和运行,确保开发环境顺利搭建。
43 7
鸿蒙Flutter实战:11-使用 Flutter SDK 3.22.0
|
18天前
|
SQL 关系型数据库 数据库
国产数据实战之docker部署MyWebSQL数据库管理工具
【10月更文挑战第23天】国产数据实战之docker部署MyWebSQL数据库管理工具
58 4
国产数据实战之docker部署MyWebSQL数据库管理工具
|
10天前
|
关系型数据库 分布式数据库 数据库
PostgreSQL+Citus分布式数据库
PostgreSQL+Citus分布式数据库
42 15
|
8天前
|
存储 SQL 数据库
深入浅出后端开发之数据库优化实战
【10月更文挑战第35天】在软件开发的世界里,数据库性能直接关系到应用的响应速度和用户体验。本文将带你了解如何通过合理的索引设计、查询优化以及恰当的数据存储策略来提升数据库性能。我们将一起探索这些技巧背后的原理,并通过实际案例感受优化带来的显著效果。
27 4
|
16天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
82 1
|
18天前
|
UED
<大厂实战经验> Flutter&鸿蒙next 中使用 initState 和 mounted 处理异步请求的详细解析
在 Flutter 开发中,处理异步请求是常见需求。本文详细介绍了如何在 `initState` 中触发异步请求,并使用 `mounted` 属性确保在适当时机更新 UI。通过示例代码,展示了如何安全地进行异步操作和处理异常,避免在组件卸载后更新 UI 的问题。希望本文能帮助你更好地理解和应用 Flutter 中的异步处理。
61 3
|
18天前
|
JavaScript API 开发工具
<大厂实战场景> ~ Flutter&鸿蒙next 解析后端返回的 HTML 数据详解
本文介绍了如何在 Flutter 中解析后端返回的 HTML 数据。首先解释了 HTML 解析的概念,然后详细介绍了使用 `http` 和 `html` 库的步骤,包括添加依赖、获取 HTML 数据、解析 HTML 内容和在 Flutter UI 中显示解析结果。通过具体的代码示例,展示了如何从 URL 获取 HTML 并提取特定信息,如链接列表。希望本文能帮助你在 Flutter 应用中更好地处理 HTML 数据。
99 1