HarmonyOS笔记4:从云数据库获取数据

移动应用获取数据的方式主要有:
1.从网络中获取数据接口API。
2.从华为云数据库获取云数据库的资源。
3.从移动终端直接获取本地的数据
在HarmonyOS笔记3中已经完成了方式一从网络中获取数据接口API的方式。在本篇笔记中,将讨论从云数据库中获取数据。
因为采用SDK API12中模拟器测试一直不能成功,从技术论坛某篇求助帖看到,需要真机才能成功。因此,在这篇笔记中将采SDK API9的版本,开发工具是DevEco Studio 3.1.0版本。特此说明。
开发基于云数据库的移动应用需要按照下图的步骤进行:
在这里插入图片描述

一、注册华为开发者账号
访问网站“https://developer.huawei.com/consumer/cn/”,需要提供个人信息进行注册,并开通“实名认证”,具体操作略。
二、进入AGC控制台
登录华为开发者账号后,访问网站“https://developer.huawei.com/consumer/cn/service/josp/agc/index.html#/”进入"AppGallery Connect"控制台,如图1所示:
在这里插入图片描述
图1 AGC控制台

1.创建新的项目

在图1所示的页面中,点击“我的项目”。
在这里插入图片描述
图2 “我的项目“
在”我的项目"界面中,点击"添加项目”,进入项目编辑界面,配置项目信息。
在这里插入图片描述
图3 创建项目
设置项目的名称,并点击“创建并继续”,在后续的操作中,因为仅仅是一个测试应用,因此将默认的“为此项目启动分析服务”关闭,点击“完成”
在这里插入图片描述
图4 开通分析服务
如果希望开通,也可以直接启动分析服务。在此不再赘述。

2.创建新的应用

返回"AGC 控制台",选择"证书、APP ID和Profile"项目,如下图所示:
在这里插入图片描述
图5 AGC控制台
在AGC页面中,选择“证书、APP ID和Profile”,进入页面“证书、APP ID和Profile”,然后点击“新建”,如图5所示:
在这里插入图片描述
图5 选择 “APP ID”
在后续的APP ID页面中配置“设置应用开发基础信息”。
在这里插入图片描述
图6 编辑移动应用基础信息
注意,包名与后续开发的移动应用的包名一致。点击“下一步”,为新建的应用配置所属的项目,如下图所示。
在这里插入图片描述
图7 配置应用所属的项目
在点击“确认”后,开通“认证服务”。
在这里插入图片描述
图8 检索认证服务,并开通认证服务
在这里插入图片描述
图9 创建新应用成功

3.开通并配置云数据库

返回AGC 控制台,如图10所示,选择"云数据库":
在这里插入图片描述
图10 AGC 控制台
在AGC 控制台中,选择“云数据库”,进入图11所示的云数据库页面:
在这里插入图片描述
图11 云数据库
在云数据库页面中,选择“立即开通”。为指定的应用设置数据处理的位置。
在这里插入图片描述
图12 配置数据处理位置
配置云数据库所在的地理位置,此处配置为“中国”,设为默认位置,点击“确定”,进入“云数据库 for Object"。
在这里插入图片描述
图13 云数据库 for Object
点击”新建“,新建数据对象类型,如图14所示。
在这里插入图片描述
图14 配置数据对象类型名
然后分别依次配置数据对象类型的“字段”,“索引”和“数据权限”。
在这里插入图片描述
图15配置数据对象字段
在这里插入图片描述
图16配置索引
在这里插入图片描述
图17 配置数据权限
为了后续的操作方便,此处将所有的权限进行勾选。配置数据对象完毕后,继续执行导出数据类型对象的操作,如图18所示:
在这里插入图片描述
图18 数据类型对象
分别导出json格式文件和js格式文件。
在这里插入图片描述
图19 导出json格式文件
在这里插入图片描述
图20 导出js格式文件
导出的文件是一个压缩包,压缩包内包含一个js文件。将压缩包解压后的js文件(此处是MedalInfo.js)暂时保存起来,以备后续使用。此处导出的json文件和js文件均可以为后续的开发提供支持。
然后,设置数据对象类型(相当于数据表)的存储区。点击“新增”
在这里插入图片描述
图21 进入存储区
在这里插入图片描述
图22 配置存储区
在这里插入图片描述
图23 进入存储的数据
点击“新增”,进入数据的配置界面,如图24所示。
在这里插入图片描述
图24 新增数据
这种一个一个数据输入的方式非常繁琐,也可以直接批量导入数据。
在这里插入图片描述
图25 选择要导入文件操作
在这里插入图片描述
图26 选择要导入的文件
导入的文件格式是JSON形式,类似如下所示:

{"cloudDBZoneName": "MedalZone","objectTypeName": "MedalInfo","objects": [{"areaId": "CHN","areaName": "中国","goldMedal": 40,"silverMedal": 27,"bronzeMedal": 24,"areaIcon": "https://gstatic.olympics.com/s1/t_original/static/noc/oly/3x2/180x120/CHN.png"},{"areaId": "USA","areaName": "美国","goldMedal": 40,"silverMedal": 44,"bronzeMedal": 42,"areaIcon": "https://gstatic.olympics.com/s1/t_original/static/noc/oly/3x2/180x120/USA.png"},//...更多的记录略
}

此处:
“cloudDBZoneName”: “MedalZone”:表示存储区,与设置的数据类型的存储区名一致。
“objectTypeName”: “MedalInfo”:表示数据类型名称,与定义的数据类型名一致。
"objects"表示的是存储的数据,采用json数组的形式。
可以点击“查询”,可以检索的所有的数据,如图27所示。
在这里插入图片描述图27 检索所有的数据
返回AGC 控制的常规页面,如图28所示:
在这里插入图片描述
图28 常规页面
在该页面中下载下载最新的配置文件“agconnect-service.json”,为后续的移动开发提供支持。

三、开发移动应用

启动DevEco Studio 3.1.0版本,新建项目如下所示:
在这里插入图片描述
图28 创建项目
其中,包名必须与AGC 控制台创建应用的包名一致。

1.配置相关的文件

将下载的配置文件"agconnect-services.json"文件复制到resources/rawfile目录中,如图29所示:
在这里插入图片描述
图29 复制agconnect-services.json文件到rawfile目录
配置当前模块的module.json5文件,增加互联网访问权限的内容,代码片段如下所示:
在这里插入图片描述
图30 module.json5增加互联网访问权限

"requestPermissions": [{"name": "ohos.permission.INTERNET"}]

打开DevEco Studio 3.1.0 应用级oh-package.json5文件,在oh-package.json5文件里面添加SDK依赖,添加SDK依赖完成后,点击右上方“Sync Now”同步。

{"name": "entry","version": "1.0.0","description": "Please describe the basic information.","main": "","author": "","license": "","dependencies": {"@hw-agconnect/database-ohos":"^1.1.2","@hw-agconnect/core-ohos": "^1.1.2"}
}

2.定义数据类型

在ets目录下创建一个model目录,将下载的数据类型的js文件,复制到model目录。另外,在model目录中新建一个app-schema.json文件,将上述导出的数据类型的json文件,复制粘贴到app-schema.json文件中。
在这里插入图片描述
图31 定义数据类型

3. 定义访问云数据库的服务

创建service目录,在该目录下定义一个typescript文件CloudDBService.ts文件,定义执行对云数据库操作的各种业务处理,具体代码如下:

import { AGConnectCloudDB, CloudDBZoneConfig, CloudDBZone, CloudDBZoneQuery } from '@hw-agconnect/database-ohos';
// @ts-ignore
import schema from '../model/app-schema.json';
import { AGCRoutePolicy } from "@hw-agconnect/core-ohos";
import { MedalInfo } from '../model/MedalInfo';export class CloudDBService {//必须与AGC控制台指定云数据库的存储区名一致private static readonly ZONE_NAME = 'MedalZone';private static cloudDB: AGConnectCloudDB;private static cloudDBZone: CloudDBZone;private static isInit: boolean;/*** 初始化** @param context context* @returns 是否初始化成功*/public static async init(context: any): Promise<boolean> {if (this.isInit) {return;}try {// 初始化并获取AGConnectCloudDBthis.cloudDB = await AGConnectCloudDB.getInstance({context: context, // 在eTS页面中通过全局方法getContext(this)获取当前页面关联的ContextagcRoutePolicy: AGCRoutePolicy.CHINA, // 数据处理位置,CHINA-中国区,GERMANY-德国,RUSSIA-俄罗斯,SINGAPORE-新加坡objectTypeInfo: schema});// 打开存储区await this.openZone(this.ZONE_NAME);this.isInit = true;} catch (err) {console.error(`初始化失败,因为:${JSON.stringify(err)}`)}return Promise.resolve(this.isInit);}/*** 打开存储区** @param zoneName 存储区名称* @returns*/private static async openZone(zoneName: string): Promise<void> {if (this.cloudDBZone) {console.log('zone has been closed.')return;}try {const cloudDBZoneConfig = new CloudDBZoneConfig(zoneName);this.cloudDBZone = await this.cloudDB.openCloudDBZone(cloudDBZoneConfig);console.log('[openZone] open zone success.')} catch (e) {console.error('[openZone] open zone failed. e:' + e);console.error(JSON.stringify(e));}}/*** 查询并排序数据* * @param queryStr 查询条件,可为空* @returns 查询数据结果数组*/public static async queryRecord(queryStr?: string): Promise<Array<MedalInfo>> {try {//按照金牌的个数进行排序const query = CloudDBZoneQuery.where(MedalInfo).orderByDesc("goldMedal");if (queryStr) {query.contains('areaName', queryStr);}const result = await this.cloudDBZone.executeQuery(query);return result.getSnapshotObjects();} catch (e) {console.error('[queryRecord] queryRecord failed. e:' + JSON.stringify(e));return [];}}
}

4. 定义Index.ets的UI页面

import { MedalInfo } from '../model/MedalInfo'
import { CloudDBService } from '../service/CloudDBService'@Entry
@Component
struct Index {@State medalLst:Array<MedalInfo> = []onPageShow(){this.queryAll()}build() {Column(){Row({space:10}){Text("").width(60).height(20)Text("国家/地区").width(60).height(20)Text("金牌").width(60).height(20)Text("银牌").width(60).height(20)Text("铜牌").width(60).height(20)}List(){ForEach(this.medalLst,(item:MedalInfo)=>{ListItem(){Row({space:10}){Image(`${item.areaIcon}`).width(60).height(40)Text(`${item.areaName}`).width(60).height(40)Text(`${item.goldMedal}`).width(60).height(40)Text(`${item.silverMedal}`).width(60).height(40)Text(`${item.bronzeMedal}`).width(60).height(40)}}.width("100%").margin(10)})}}.width("100%").height("100%")}async queryAll(){try{// 初始化await CloudDBService.init(getContext(this));// 查询数据并展示this.medalLst = await CloudDBService.queryRecord();}catch(err){console.error(`出现错误:${JSON.stringify(err)}`)}}
}

5.运行结果

在这里插入图片描述
图32 最后的运行结果

后记

这篇笔记是比较艰难的一篇。一方面是在云数据库的配置,整个详细过程需要截取大量的图片;另外一方面,就是测试了若干版本的DevEco Studio,以及SDK API 12的版本测试云数据库,一直不能在模拟机中测试通过。直到看到这一帖子,让我不再纠结。因此,退而求其次,采用SDK API 9的版本。希望,过段时间,再出一篇SDK API 12版本云数据库处理的笔记。

参考文献

1.AppGallery Connect帮助中心 https://developer.huawei.com/consumer/cn/doc/app/agc-help-getstarted-0000001100316670
2.使用云数据库组件 https://developer.huawei.com/consumer/cn/doc/AppGallery-connect-Guides/agc-clouddb-component-harmonyosts-0000001623209420

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/403383.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker下安装Redis

下载最新Redis镜像 docker pull redis启动Redis容器 docker run -itd --name myFirstRedis -p 6379:6379 redis:latest观察Redis启动效果 docker ps查看Redis的版本 docker exec -it myFirstRedis /bin/bash redis-server --versionRedis服务器和客户端 Redis是基于键值对存…

了解Android

Android 系统架构 从图中可以看出&#xff0c;整个Android操作系统分为五层。它们分别是&#xff1a; 内核层 Android系统是基于Linux内核的&#xff0c;这一层为Android设备的各种硬件提供了底层的驱动。硬件抽象层 该层为硬件厂商定义了一套标准的接口。这样可以在不影响上层…

android13禁用打开wifi ap 热点

总纲 android13 rom 开发总纲说明 目录 1.前言 2.情况分析 3.代码分析 4.代码修改 5.彩蛋 1.前言 这个文章介绍的是如何禁止用户打开wifi热点,禁止用户安装app后,打开wifi热点。 2.情况分析 android13 应用层打开wifi AP public void setWifiApEnabled(boolean isEn…

LoRA微调大语言模型Bert

LoRA是一种流行的微调大语言模型的手段&#xff0c;这是因为LoRA仅需在预训练模型需要微调的地方添加旁路矩阵。LoRA 的作者们还提供了一个易于使用的库 loralib&#xff0c;它极大地简化了使用 LoRA 微调模型的过程。这个库允许用户轻松地将 LoRA 层添加到现有的模型架构中&am…

MATLAB R2023b配置Fortran编译器

MATLAB R2023b配置Fortran编译器 引言1. 安装Visual Studio 20192. 安装Intel API20243. 配置xml文件文件4. 设置环境变量5. MATLAB编译Fortran 引言 当我们需要用到MATLAB编译Fortran代码后进行调用计算时&#xff0c;整个配置流程较繁琐。下面以MATLAB R2023b为例&#xff0…

在亚马逊云科技上部署开源大模型并利用RAG和LangChain开发生成式AI应用

项目简介&#xff1a; 小李哥将继续每天介绍一个基于亚马逊云科技AWS云计算平台的全球前沿AI技术解决方案&#xff0c;帮助大家快速了解国际上最热门的云计算平台亚马逊云科技AWS AI最佳实践&#xff0c;并应用到自己的日常工作里。 本次介绍的是如何在亚马逊云科技上利用Sag…

IDEA2023版本创建mavenWeb项目及maven的相关配置

在使用idea创建maven项目之前&#xff0c;首先要确保本地已经下载并配置好maven的环境变量&#xff0c;可以参考我主页的maven下载及环境变量配置篇。 接下来首先介绍我们需要对maven安装目录文件进行的修改介绍。 maven功能配置 我们需要需改 maven/conf/settings.xml 配置…

中间件|day1.Redis

Redis 定义 Redis 是一个开源&#xff08;BSD许可&#xff09;的&#xff0c;内存中的数据结构存储系统&#xff0c;它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构&#xff0c;如 字符串&#xff08;strings&#xff09;&#xff0c; 散列&#xff08;hash…

构建一个Markdown编辑器:Fyne综合案例

在本文中&#xff0c;我们将通过一个完整的案例来介绍如何使用Go语言的Fyne库来构建一个简单的Markdown编辑器。Fyne是一个易于使用的库&#xff0c;它允许开发者使用Go语言来创建跨平台的GUI应用程序。 1. 项目结构 首先&#xff0c;我们需要创建一个Go项目&#xff0c;并引…

Linux进程间通信——SystemV共享内存

文章目录 System V共享内存创建内存共享释放共享内存命令行shmctlshmatshmdt System V共享内存 System V是一种进程间通信的标准&#xff0c;在这种标准之下&#xff0c;本地通信的方式一般由三种&#xff0c;内存共享、消息队列、信号量 这里我们主要介绍共享内存 创建内存…

Shell参考 - Linux Shell 训练营

出品方<Linux.cn & 阿里云开发者学堂> 一&#xff0c;Linux 可以划分为以下四个部分&#xff1a; 1. 应用软件 2. 窗口管理软件 Unity Gnome KDE 3. GNU 系统工具链 Software- GNU Project - Free Software Foundation 4. Linux 内核 二&#xff0c;什么是shell 1. L…

达梦数据库的系统视图v$database

达梦数据库的系统视图v$database 达梦数据库&#xff08;DM Database&#xff09;提供了多个系统视图&#xff0c;以便管理员能够监控和管理数据库的运行状态和性能。V$DATABASE 是其中一个关键系统视图&#xff0c;它包含有关数据库全局状态和配置的综合信息。 V$DATABASE 系…

Linux 软件编程学习第十五天

1.TCP粘包问题&#xff1a; TCP发送数据是连续的&#xff0c;两次发送的数据可能粘连成一包被接收到 1.解决粘包问题方法&#xff1a; 1.接收指定长度&#xff1a;&#xff08;不稳定&#xff09; 发送5个字节 接收5个字节 2.睡眠&#x…

Java | Leetcode Java题解之第342题4的幂

题目: 题解&#xff1a; class Solution {public boolean isPowerOfFour(int n) {return n > 0 && (n & (n - 1)) 0 && n % 3 1;} }

【数据结构算法经典题目刨析(c语言)】使用数组实现循环队列(图文详解)

&#x1f493; 博客主页&#xff1a;C-SDN花园GGbond ⏩ 文章专栏&#xff1a;数据结构经典题目刨析(c语言) 目录 一.题目描述 二.解题思路 1.循环队列的结构定义 2.队列初始化 3.判空 4.判满 5.入队列 6.出队列 7.取队首元素 8.取队尾元素 三.完整代码实…

接入谷歌支付配置

1.谷歌云创建项目 网址&#xff1a;https://console.cloud.google.com/ 按照步骤创建即可 创建好后选择项目&#xff0c;转到项目设置 选择服务账户&#xff0c;选择创建新的服务账户 名称输入好后访问权限吗账号权限都可以不用填写&#xff0c;默认就好了 然后点击电子邮…

企业高性能web服务器

目录 一.Web 服务基础介绍 1.1 Web 服务介绍 1.2.1 Apache 经典的 Web 服务端 1.2.1.1 Apache prefork 模型 1.2.1.2 Apache worker 模型 1.2.1.3 Apache event模型 1.2.2 Nginx-高性能的 Web 服务端 1.2.3 影响用户体验的因素 1.2.4 服务端 I/O 流程 1.2.4.1 磁盘 I…

【详细】linux 打包QT程序

【详细】linux 打包QT程序 一. 安装linuxdeployqt1.1 下载linuxdeployqt源码并修改如下 二. 安装patchelf三. 打包appimage四. 打包成 Debian包4.1 control文件内容4.2 postinst文件内容4.3 postrm文件内容4.4 打包命令4.4 安装命令4.5 卸载命令 一. 安装linuxdeployqt 下载地…

Gin框架接入Prometheus,grafana辅助pprof检测内存泄露

prometheus与grafana的安装 grom接入Prometheus,grafana-CSDN博客 Prometheus 动态加载 我们想给Prometheus新增监听任务新增ginapp项目只需要在原来的配置文件下面新增ginapp相关metric 在docker compose文件下面新增 执行 docker-compose up -d curl -X POST http://lo…

复现dom破坏案例和靶场

文章目录 靶场网址第一个实验步骤和原理(代码为示例要根据自己的实验修改) 第二个实验步骤和原理(代码为示例要根据自己的实验修改) 靶场网址 注册后点击 第一个实验 此实验室包含一个 DOM 破坏漏洞。注释功能允许“安全”HTML。为了解决这个实验&#xff0c;请构造一个 HT…