HarmonyOS Next 端云一体化(2)

简介: 本文介绍了HarmonyOS云数据库端云一体化中的数据库操作流程。首先创建名为“Study”的存储区,并在DevEco Studio中配置信息;接着定义对象类型,以“Book”为例,详细说明objectTypeName、fields、indexes和permissions的设置规则;然后通过JSON文件添加数据条目,配置cloudDBZoneName和objects字段;最后将本地数据库部署至AGC平台并刷新数据。全文涵盖存储区创建、对象类型定义、数据操作及云端部署等核心步骤,为端云协同开发奠定基础。

HarmonyOS Next 端云一体化(2)

本章节主要讲一下端云一体化中的数据库操作

介绍

云数据库是端云协同的数据库产品,具备端云数据协同管理、统一数据模型及丰富数据管理 API 接口等能力。它采用基于对象模型

数据存储结构,数据以对象(Object) 形式存于不同存储区,每个对象为一条完整数据记录。 对象类型(ObjectType) 定义存储对

象集合,不同对象类型对应不同数据结构。存储区(Zone) 是独立的数据存储区域,每个存储区的对象类型定义完全相同。

学习流程

我们会按照以下流程来进行学习。

  1. 新建存储区:也就是新建数据库
  2. 创建对象类型:创建一个用于存储数据条目的对象类型。
  3. 添加数据条目:在刚刚创建的对象类型内添加一条条数据,并配置数据所在的存储区。
  4. 部署云数据库:数据成功添加后,您可以直接将该数据部署至 AGC 云端。您也可以等所有对象类型和数据条目开发完成后,再统一批量部署到 AGC 云端。

存储区

我们这里新建一个存储区 Study 用来存放稍后用到的数据。

image-20250116105318813

然后我们在 DevEco Studio 的 云端配置中指定存储区。

clouddb/db-config.json

{
    "defaultCloudDBZoneName": "Study", // 存储区的名称
    "defaultDataStorageLocation": "CN"
}
AI 代码解读

创建对象类型

什么是创建对象类型

创建对象类型可以理解为就是为我们的数据定义类型。类似于使用接口或者 class 来定义数据,但是这里操作的范围要更大。

  1. 定义基本的数据类型,如数字、字符串、布尔、日期时间等。
  2. 定义字段的权限,因为这个对象类型本身是数据表,定义权限相当于设置了哪一类用户拥有哪些权限。如读取、编辑、新增、删除等
  3. 定义索引,考虑数据量大需要比较方便的查找到要操作的数据,需要定义索引。

比如,我们需要根据书籍数据来定义类型。 Book

字段 类型 说明
id number id
name string 书名
price number 价格
publish date 出版日期
hot boolean 是否热门
cover string 封面

对象类型的规范

新建 Book 对象类型文件

image-20250116130255215

这个对文件需要按照以下格式来编写。其中的字段的一些规范需要特别注意。

{
   
  "objectTypeName": 对象实体名称
  "fields": 对象中的属性
  "indexes": 索引
  "permissions" 权限
}
AI 代码解读

objectTypeName

表示实体对象的名称,我们这里可以是 Book

{
   
  "objectTypeName": "Book"
}
AI 代码解读

fields

fields 表示这个对象中属性的一些规则。

参数 必选(M)/可选(O) 说明
fieldName M 字段名称。输入要求具体如下:字段的名称长度必须大于或等于 1 个字符,小于或等于 30 个字符,只能包含以下 3 种类型,并且至少包含“字母”类型:字母(A-Z 或 a-z)数字(0-9)特殊字符:_字段名称必须以字母开头,以字母或者数字结尾。字段名称中不区分字母的大小写。修改对象类型时,支持删除字段。字段名称不允许使用系统保留字段名称: naturalbase_version、naturalbase_deleted、naturalbase_operationtype、naturalbase_creator、naturalbase_accesstime、naturalbase_operationtime、naturalbase_syncstatus、naturalbase_changedfieldsbitmap、naturalbase_lastmodifier、cmin、cmax、xmin、xmax、ctid、oid、tableoid、xc_node_id、tablebucketid、rowid。说明当前 Cloud Foundation Kit 暂不支持自增类型字段 IntAutoIncrement 或 LongAutoIncrement。
fieldType M 字段的数据类型。当前支持的数据类型:String、Boolean、Byte、Short、Integer、Long、Float、Double、ByteArray、Text、Date、IntAutoIncrement(数字-自增)
belongPrimaryKey O 设置该字段是否为对象类型的主键,默认值为 false。至少设置一个字段为主键。支持设置复合主键,由多个字段组合成为主键,一个复合主键包含的字段小于等于 5 个,复合主键字段顺序与字段的顺序一致。数据类型为 ByteArray、Text、Date、Double、Float 和 Boolean 的字段不支持设置为主键。主键的值不允许更改。
notNull O 设置字段值是否为非空,默认值为 false。数据类型为 ByteArray 和 Date 的字段不支持设置为非空。主键默认非空,且不允许更改。设置为非空的字段不支持加密和敏感。
isNeedEncrypt O 设置字段是否需要加密,开启全程加密数据管理功能,默认值为 false。选择加密后,该字段对应的数据会加密存储在存储区中。主键字段不支持加密。加密的字段不支持设置为非空。加密的字段不支持设置为敏感字段。一个对象类型中包含的加密字段和敏感字段的总数需小于或等于 5 个。字段设置为加密后,不支持导出该字段的数据值。数据类型为 ByteArray、Text 的字段不支持加密。对象类型创建成功后,不支持修改加密属性。
isSensitive O 设置字段是否为敏感字段,默认值为 false。选择敏感后,该字段对应的数据会加密存储在存储区中。敏感字段不支持设置为主键。敏感字段不支持设置为非空。敏感字段不支持设置为加密。敏感字段不支持设置为默认值。对象类型创建成功后,不支持修改敏感属性。仅支持数据类型为 Byte、Short、Integer、Long、Float、Double、String 和 Date 的字段设置为敏感字段。敏感字段不支持设置为索引。一个对象类型中包含的加密字段和敏感字段的总数需小于或等于 5 个。
defaultValue O 字段为非空时,必须设置默认值。主键不支持设置默认值。加密字段和敏感字段不支持设置默认值。数据类型为 ByteArray、Date 不支持为其设置默认值。数据类型为 Text 的字段设置默认值时,默认值的长度小于或等于 200 个字符。

按照我们想要的书籍的规定。可以这样

fieldName fieldType belongPrimaryKey
id IntAutoIncrement true
name String -
price Double -
publish Date -
hot Boolean -
cover String -
{
   
  "objectTypeName": "Book",
  "fields": [
    {
   
      "fieldName": "id",
      "fieldType": "IntAutoIncrement",
      "belongPrimaryKey": true,
      "notNull": true
    },
    {
   
      "fieldName": "name",
      "fieldType": "String"
    },
    {
   
      "fieldName": "price",
      "fieldType": "Double"
    },
    {
   
      "fieldName": "publish",
      "fieldType": "Date"
    },
    {
   
      "fieldName": "hot",
      "fieldType": "Boolean"
    },
    {
   
      "fieldName": "cover",
      "fieldType": "String"
    }
  ]
}
AI 代码解读

indexes

indexes中为该对象类型配置索引、索引包含的字段、以及索引包含的字段的排序方式。

参数 必选(M)/可选(O) 说明
indexName M 索引名称。输入要求具体如下:索引的名称长度必须大于或等于 1 个字符,小于或等于 30 个字符,只能包含以下 3 种类型,并且至少包含“字母”类型:字母(A-Z 或 a-z)数字(0-9)特殊字符:_索引名称必须以字母开头。索引名称中不区分字母的大小写。修改对象类型时,仅支持新增或者删除索引。当删除索引后,本次提交前不允许新增同名索引。每个对象类型可以设置小于或等于 16 个索引。数据类型为 ByteArray 和 Text 的字段不支持设置为索引。
indexList > fieldName M 索引包含的字段。支持设置组合索引,由多个字段组合成为索引,一个组合索引包含的字段不超过 5 个。
indexList > sortType M 索引包含的字段的排序方式,支持 ASC 升序或 DESC 降序。

这里我们为书籍的 id 和书籍的名称提供索引。

{
   
  "indexes": [
    {
   
      "indexName": "id_Index",
      "indexList": [
        {
   
          "fieldName": "id",
          "sortType": "ASC"
        }
      ]
    },
    {
   
      "indexName": "price_Index",
      "indexList": [
        {
   
          "fieldName": "price",
          "sortType": "DESC"
        }
      ]
    }
  ]
}
AI 代码解读

permissions

permissions 字段用来设置该数据表的操作权限的。

目前提供的角色和权限有以下分类。

参数 必选(M)/可选(O) 说明
role M 用户角色,包括:World:代表所有用户,包含认证和非认证用户。该角色默认拥有 Read 权限,可自定义配置 Upsert 和 Delete 权限。但是,不建议将 Upsert 和 Delete 权限配置给所有人角色。当对象类型中设置了加密字段之后,表示开启全程加密功能,此时所有人角色将不会拥有 Read、Upsert 和 Delete 权限,且不允许修改。Authenticated:经过 AGC 登录认证的用户。该角色默认拥有 Read 权限,可自定义配置 Upsert 和 Delete 权限。当对象类型中设置了加密字段之后,表示开启全程加密功能,此时认证用户角色将不会拥有 Read、Upsert 和 Delete 权限,且不允许修改。Creator:经过认证的数据创建用户。该角色默认拥有所有权限,且可自定义配置所有权限。每条数据都有其对应的数据创建人(即应用用户),每个数据创建者仅可以 Upsert 或者 Delete 自己创建的数据,不能 Upsert 或者 Delete 他人创建的数据。数据创建者的信息保存在数据记录的系统表中。Administrator:应用开发者,主要是指通过 AGC 控制台或 FaaS(Function as a Service,函数即服务)侧访问云数据库的角色。该角色默认拥有所有权限,且可自定义配置所有权限。Administrator 可以管理并配置其他角色的权限。
rights M 授予角色的权限,包括 Read、Upsert(包含新增和修改)和 Delete 权限。

接下来,我们为 这些角色设置以下的权限。

角色 Read Upsert Delete
World
Authenticated
Creator
Administrator

代码如下:

{
   
  "permissions": [
    {
   
      "role": "World",
      "rights": ["Read"]
    },
    {
   
      "role": "Authenticated",
      "rights": ["Read", "Upsert"]
    },
    {
   
      "role": "Creator",
      "rights": ["Read", "Upsert", "Delete"]
    },
    {
   
      "role": "Administrator",
      "rights": ["Read", "Upsert", "Delete"]
    }
  ]
}
AI 代码解读

创建数据条目

我们搭建好了对象类型,现在可以根据它来插入数据了。

  1. 新建数据文件

    image-20250116160900005


    image-20250116160911750

  2. 插入数据 这里可以看到一些基本数据

    {
         
      "cloudDBZoneName": "Study",
      "objectTypeName": "Book",
      "objects": [
        {
         
          "id": 1,
          "name": "string1",
          "price": 10.5,
          "publish": 1737014949576,
          "hot": true,
          "cover": "string1"
        },
        {
         
          "id": 2,
          "name": "string2",
          "price": 20.5,
          "publish": 1737014949576,
          "hot": false,
          "cover": "string2"
        }
      ]
    }
    
    AI 代码解读

    字段解释

    • cloudDBZoneName:配置存储区名称。
    • objects:配置当前对象类型中所有字段的值,即写入数据。一个对象(object)即为一条数据,您可以通过新建一个对象(object)来为字段赋新值,也可以修改某个对象(object)下字段的值(主键或加密字段的值不支持修改)

部署云数据库

刚才我们都是在本地搭建的数据库,现在我们需要将这些数据同步到 AGC 平台的数据库上。

部署的方式也很简单

  1. 部署

image-20250116161334518

  1. 成本

image-20250116170856484

  1. 刷新 AGC 平台上的数据库

    image-20250116170956502

总结

本文详细介绍了 HarmonyOS 云数据库的基本操作流程:

  1. 存储区(Zone)创建

    • 创建名为 Study 的存储区
    • 在 DevEco Studio 中配置存储区信息
  2. 对象类型(ObjectType)定义

    • 详细讲解了对象类型的规范和组成部分
    • 包含 objectTypeName、fields、indexes 和 permissions 四个主要部分
    • 以 Book 对象为例,展示了完整的对象类型定义过程
  3. 数据操作

    • 创建数据条目的具体步骤
    • 展示了如何在 JSON 文件中定义数据内容
    • 说明了 cloudDBZoneName 和 objects 的配置方法
  4. 云端部署

    • 介绍了如何将本地数据库部署到 AGC 平台
    • 展示了部署过程和成本预估
    • 说明了如何在 AGC 平台上刷新数据库

通过这些步骤,我们完成了一个基本的云数据库的创建、配置和部署过程,为后续的端云协同开发打下了基础。


如果你兴趣想要了解更多的鸿蒙应用开发细节和最新资讯,欢迎在评论区留言或者私信或者看我个人信息,可以加入技术交流群。

目录
打赏
0
5
5
0
133
分享
相关文章
|
1天前
HarmonyOS NEXT - @Prop和@Link
本示例介绍了`@Prop`和`@Link`装饰器在父子组件间的数据同步机制。`@Prop`实现单向数据绑定,子组件可修改本地值,但不会同步回父组件;父组件数据更新时会覆盖子组件的本地更改。`@Link`实现双向绑定,子组件与父组件数据共享且相互影响。 **限制条件:** - `@Prop`变量深拷贝时可能丢失复杂类型。 - `@Link`不可用于`@Entry`组件,禁止本地初始化,类型需与数据源一致。 **支持类型:** - `@Prop`支持基础类型、对象、数组、`Date`及联合类型,不支持`any`。 - 数据源与`@Prop`类型需匹配,包括简单类型、数组项及对象属性。
53 41
|
1天前
|
HarmonyOS NEXT - ArkUI: Button组件
Button是用于响应用户点击操作的按钮组件,支持胶囊型、圆形和普通三种样式。可通过`type`属性设置样式(默认为胶囊型),并使用`stateEffect`控制按压态效果(默认开启)。Button可包含子组件,实现复杂功能按钮;支持自定义文本样式、背景色及边框弧度等样式。示例代码展示了不同类型按钮的创建、子组件嵌套及点击事件处理方法。
51 18
HarmonyOS NEXT - ArkUI: TextInput组件
TextInput组件是用于输入单行文本的核心组件,广泛应用于登录账号、密码输入及消息发送等场景。支持通过`placeholder`设置提示文字、`text`初始化文本内容以及`controller`控制输入行为。提供多种输入类型(如普通、密码、邮箱、数字)通过`.type()`方法设置,并可通过`.onChange()`监听文本变化。 示例代码展示了基本用法,包括账号、密码和手机号的输入框实现。此外,组件支持字符计数功能,通过`.maxLength()`限制最大字符数、`.showCounter()`显示计数器,并可自定义阈值和高亮边框效果,满足复杂输入场景需求。
51 15
|
1天前
HarmonyOS NEXT - ArkUI: Image组件
Image组件用于渲染和展示图片,丰富界面视觉效果。支持png、jpg、bmp、svg、gif和heif等多种格式,数据源包括本地资源、Resource资源、网络资源、媒体库(file://路径)及PixelMap像素图。使用时需根据资源类型配置路径或权限(如网络图片需声明ohos.permission.INTERNET)。此外,Image组件支持矢量图填充颜色设置(fillColor)和多种缩放模式(objectFit),如Contain、Cover等。示例代码展示了本地、资源、网络图片的加载与样式调整方法。
52 14
HarmonyOS NEXT - RelationalStore关系型数据库
关系型数据库对应用提供通用的操作接口,底层使用SQLite作为持久化存储引擎,支持SQLite具有的数据库特性,包括但不限于事务、索引、视图、触发器、外键、参数化查询和预编译SQL语句。
52 27
HarmonyOS NEXT - Preferences用户首选项
- 用户首选项为应用提供Key-Value键值型的数据处理能力,支持应用持久化轻量级数据,并对其修改和查询。 - Preferences会将该数据缓存在内存中,当用户读取的时候,能够快速从内存中获取数据。Preferences会随着存放的数据量越多而导致应用占用的内存越大,因此,Preferences不适合存放过多的数据。
53 19
|
1天前
|
HarmonyOS NEXT - @Provide和@Consume
@Provide和@Consume,应用于与后代组件的双向数据同步,应用于状态数据在多个层级之间传递的场景。不同于上文提到的父子组件之间通过命名参数机制传递,@Provide和@Consume摆脱参数传递机制的束缚,实现跨层级传递。
53 21
|
1天前
HarmonyOS NEXT - @State状态变量
ArkUI 是一种声明式 UI 框架,通过状态驱动 UI 更新。@State 装饰的变量用于管理组件内部状态,具有以下特点:私有性(仅组件内访问)、必须初始化、生命周期与组件一致。它支持单向(与 @Prop)和双向(与 @Link、@ObjectLink)数据同步。状态改变时,绑定的 UI 会自动刷新。注意:@State 不支持 Function 类型,不能在 build 中修改状态变量。代码示例中展示了通过 @State 管理按钮点击计数的状态更新机制。
52 16
|
1天前
|
HarmonyOS NEXT - 页签布局(Tabs)
Tabs组件是一种用于分类和切换页面内容的高效工具,适用于信息量较大的场景。 代码示例展示了如何配置Tabs组件,包括定义多个TabContent与对应的TabBar标签,以及实现动态样式切换和内容同步的功能。此外,通过`onChange`事件监听索引变化,可自定义导航逻辑以增强用户体验。侧边导航特别适合横屏应用,需调整`barWidth`和`barHeight`以优化布局效果。
51 5
|
1天前
|
HarmonyOS NEXT - @CustomDialog自定义弹窗
CustomDialog 是一个用于实现自定义弹窗的工具,适用于广告、中奖提示、警告信息、软件更新等用户交互场景。通过 `CustomDialogController` 类可控制弹窗的显示与隐藏。开发者可配置多种选项,如对齐方式、偏移量、蒙层颜色、动画效果等,支持模态与非模态窗口,并可通过装饰器 `@CustomDialog` 定义弹窗界面。示例代码展示了如何创建欢迎弹窗及响应用户操作,灵活满足不同需求。
54 13
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等