鸿蒙前后端互联实现接收发送数据+MySQL数据库(简单示例)

这篇具有很好参考价值的文章主要介绍了鸿蒙前后端互联实现接收发送数据+MySQL数据库(简单示例)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

准备工作

  • Visual Studio Code
  • mySQL+DBeaver(已连接,具体连接可参考http://t.csdnimg.cn/7U7Oj)另外不用可视化工具DBeaver,可下载vscode插件mysql连接MySQL
  • DevEco Studio

python连接数据库

安装(终端运行安装)
pip install pymysql==1.0.2

pip install flask

pip install requests

pip install flask_cors
直接看代码(python后端代码)

使用flask创建了一个应用实例,包含两个路由,一个用于发送到前端,一个用于接收前端的数据。

#导入需要的模块
#用于构建 Web 应用程序。这段代码中导入了 Flask、request 和 jsonify,其中 Flask 是主要的模块,
#request 用于处理 HTTP 请求对象,
import json
import logging
from flask import Flask, request, jsonify

from flask_cors import CORS
#用于连接和操作 MySQL 数据库。通过这个库,在 Python 程序中执行 SQL 语句、插入、更新和删除数据等操作。
import pymysql
#用于发送 HTTP 请求并处理响应
import requests
# 连接数据库
conn = pymysql.connect(host='127.0.0.1', # 连接名称,默认127.0.0.1
                       user='root', # 用户名,默认为root
                       passwd='123456', # 密码,默认为123456
                       port=3306, # 端口,默认为3306
                       db='weldingdata', # 所创建的数据库名称**************************************************************************
                       charset='utf8') # 字符编码
# 生成游标对象
cur_1 = conn.cursor()
cur_2 = conn.cursor()
cur_3 = conn.cursor()
# SQL语句*************************************************************table name******************************表名
sql_1 = "select voltage from `datas`"
sql_2="select electricity from `datas`"
sql_3="select pressure from `datas`"
# 执行SQL语句,并将结果保存到游标对象中使用 cur.execute(sql) 方法来执行该语句,并将查询结果保存到游标对象 cur 中,以便后续处理或输出
cur_1.execute(sql_1)
cur_2.execute(sql_2)
cur_3.execute(sql_3)
# 通过fetchall方法获得数据
data_1 = cur_1.fetchall()
data_2 = cur_2.fetchall()
data_3 = cur_3.fetchall()

#打印数据
for item in data_1:
    print(item)
# 关闭游标
cur_1.close()
cur_2.close()
cur_3.close()
# 关闭连接
conn.close()
# 导入Flask模块,创建一个应用实例,用于发送 HTTP 请求并处理响应

#创建了一个名为 app 的 Flask 应用实例
app = Flask(__name__)
# 允许跨域访问
CORS(app, resources={r"/*": {"origins": "*"}})
# 设置日志
logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger(__name__)
# 使用 @app.route 装饰器来定义了一个路由,指定了 /api/users 这个端点接收 GET 请求
# 处理 HTTP GET 请求,向前端发送数据
@app.route('/api/users', methods=['GET'])
def get_data():
    # 将元组转换为列表,并将所有元素转换为字符串
    result = [list(map(str, item)) for item in data_1]  
     # 将列表转换为JSON格式
    json_result = json.dumps(result) 
    # 将JSON数据发送到指定URL
    return jsonify(json_result)  
#测试地址:http://127.0.0.1:5000/api/users


# 处理前端发送的数据,例如插入到数据库
@app.route('/submit-fault', methods=['POST'])
def submit_fault():
    data = request.json
    process_data(data)  # 处理数据的函数
    return jsonify({'message': 'Fault information submitted successfully.'})
def process_data(data):
   print(data)
   return
#http://127.0.0.1:5000/submit-fault
# 启动Flask应用
if __name__ == '__main__':
    app.run(debug=True)
数据库中的数据

数据库名为weldingdata,表名为data,数据如图所示(这里我直接用了vscode插件,用DBeaver也一样,只要连接上了就行)

鸿蒙客户端后端,鸿蒙App,harmonyos,华为,数据库,前端,mysql运行结果

python终端(运行成功,大家有需要可自行执行其他sql语句并对代码进行修改得到自己想要的数据),这里我只让它输出了voltage这列的所有数据。

鸿蒙客户端后端,鸿蒙App,harmonyos,华为,数据库,前端,mysql

指定的url地址界面,可以看到自己发送的数据。

鸿蒙客户端后端,鸿蒙App,harmonyos,华为,数据库,前端,mysql

连接鸿蒙前端

现在数据已经可以从后端发送到指定的url了,接下来就是前端通过网络请求拿到这个地址的数据。

 module.json5配置

首先配置网络权限。插入(在module后插入就ok了)

    requestPermissions:[
{
name: "ohos.permission.INTERNET"
}
] ,
鸿蒙前端index代码示例
import http from '@ohos.net.http';
@Preview
@Entry
@Component
struct Index {
  @State message: string = 'Demo'
@State numArr:number[]=[]
  transmit_data(){
    let httpRequest_transmit = http.createHttp();
    let dataToSend = { "树深时见鹿":"溪午不闻钟","南风知我意":"吹梦到西洲","与君初相识":"犹如故人归",};
    httpRequest_transmit.request(
      "http://127.0.0.1:5000/submit-fault",
      {
        method:http.RequestMethod.POST,
        header:{"Content-Type": "application/json"},
        // 将数据转换为JSON字符串
        extraData: JSON.stringify(dataToSend)
      },
      (err, data) => {
        if (!err) {
          // 处理响应
          console.log("Data sent successfully");
        } else {
          // 错误处理
          console.log("Failed to send data");
        }
      }
    );
  }
  HTTP() {
    ///创建HTTP请求对象
    let httpRequest = http.createHttp();
    httpRequest.request(
      // 填写HTTP请求的URL地址,可以带参数也可以不带参数。URL地址需要后端定义
      "http://127.0.0.1:5000/api/users", //后端定义的url地址
      {
        method: http.RequestMethod.GET, //默认为GET方法
        //定义请求头,这里设置Content-Type为application/json,表示请求体内容的数据类型为JSON
        header: { 'Content-Type': 'application/json' },
        //设置读取超时时间为60000毫秒,即60秒 。
        readTimeout: 60000,
        //设置连接超时时间为60000毫秒,即60秒。
        connectTimeout: 60000,
      },
      (err, data) => {
        if (!err) {
          //处理data,将得到的json数据格式转为字符串存入result
          let result = data.result.toString()
          console.log(result)

          //将result转为数组存入arr
          let arr = JSON.parse(result)
          console.info(arr)

          //使用正则表达式匹配 [ 和 ] 和""并去除
          let newarr = arr.replace(/[\[\]"]+/g, '');
          console.info(newarr)

          // 将处理后的字符串按照逗号分隔成数组,并转换为数字
          this.numArr = newarr.split(',').map(Number);;
          console.log(this.numArr.toString()); // [170, 170, 220, 200, 140, 160, 70, 100, 90, 150]
          console.info(this.numArr[0].toString())//打印第一个数据
        } else {
          //输出错误信息
          console.info('error:' + JSON.stringify(err));

          //销毁
          httpRequest.destroy();
        }
      })
  }

  build() {
    Column() {
      Column() {
        Text(this.message)
          .fontSize(30)
          .fontWeight(FontWeight.Bold)
          .margin({ bottom: 20 ,top:20})
        // Text()
        //   .fontSize(22)
        //   .fontColor('#ffc318d0')
        //   .margin({bottom:50})
        Button('数字传入')
          .backgroundColor('#ff228828')
          .width(200)
          .height(60)
          .margin({top:50,bottom:50})
          .onClick(() => {
            this.HTTP()
          })

        Button('信息传出')
          .backgroundColor('#ff228828')
          .width(200)
          .height(60)
          .onClick(() => {
              this.transmit_data()
          })

      }.width('100%')
      .height(300)



    }

    .height('100%')
    .width('100%')
  }
}

 结果测试

测试页面。

鸿蒙客户端后端,鸿蒙App,harmonyos,华为,数据库,前端,mysql

 后端发送,前端接收(点击数字传入)

可以看到数据已经转换成数组存入,我这里将它在控制台打印出来了。后续可以对这些数据操作。

鸿蒙客户端后端,鸿蒙App,harmonyos,华为,数据库,前端,mysql

 前端发送,后端接收(点击信息传出)

可以看到控制台输出Data sent successfully,说明数据发送成功了。

其中第十行代码是我们定义要发送的数据。

鸿蒙客户端后端,鸿蒙App,harmonyos,华为,数据库,前端,mysql

 我们返回到后端查看数据。可以看到数据已经成功发送过来了。

后续我们可以进行对数据的处理,包括插入数据库当中。

鸿蒙客户端后端,鸿蒙App,harmonyos,华为,数据库,前端,mysql

下面是一个插入数据库的简单示例。

前面代码不变,为了简化,我只发送了一组数据,数据如下 。

let dataToSend = { "数字":"2"};

首先需要在数据库先创建一个表来存储要接收的数据。

例如我这里,还用之前的数据库,只需创建一个number_data的表,新建一个number列。

鸿蒙客户端后端,鸿蒙App,harmonyos,华为,数据库,前端,mysql

后端的代码部分

# 处理前端发送的数据,插入到数据库
@app.route('/submit-fault', methods=['POST'])
def submit_fault():
    data = request.json
    process_data(data)  # 处理数据的函数
    return jsonify({'message': 'Fault information submitted successfully.'})
def process_data(data):
    try:
        # 连接数据库
        conn = pymysql.connect(host='127.0.0.1', user='root', passwd='180805Wmy', port=3306, db='weldingdata', charset='utf8')
        # 生成游标对象
        cur = conn.cursor()

        # 插入数据的SQL语句
        #将数据插入到number_data表中的(number)列中
        sql = "INSERT INTO number_data (number) VALUES (%s)"

        # 从前端发送的数据中获取值
        #从 "数字" 中获取值 "2"
        number= data.get('数字')

        # 执行SQL语句,插入数据
        cur.execute(sql, (number))

        # 提交事务
        conn.commit()

        # 关闭游标和连接
        cur.close()
        conn.close()
    except pymysql.Error as e:
        # 打印错误信息
        print(f"Error {e.args[0]}: {e.args[1]}")
        # 回滚事务
        conn.rollback()
    except Exception as e:
        # 打印其他异常信息
        print(f"An error occurred: {e}")
    return

跟之前步骤一样,只需点击信息传出按钮。

数据就成功存入到数据库中了。

鸿蒙客户端后端,鸿蒙App,harmonyos,华为,数据库,前端,mysql

遇到的问题

数据的处理(已解决)
  • 一开始jiexijson数据时发现无法解析成想要的格式,因为是只想要数据库中的那一串数字,后来干脆用正则表达式处理字符串,最后把它放到数组里。
  • 下面就是具体操作。如果有其它办法亦可。
  • //处理data,将得到的json数据格式转为字符串存入result
              let result = data.result.toString()
              console.log(result)
    
              //将result转为数组存入arr
              let arr = JSON.parse(result)
              console.info(arr)
    
              //使用正则表达式匹配 [ 和 ] 和""并去除
              let newarr = arr.replace(/[\[\]"]+/g, '');
              console.info(newarr)
    
              // 将处理后的字符串按照逗号分隔成数组,并转换为数字
              this.numArr = newarr.split(',').map(Number);;

 问题收集

大家可将过程中自己遇到的所有问题展示出来,以便于大家学习改进。如果更好的方法或者简单直接的方式请联系我。文章来源地址https://www.toymoban.com/news/detail-851977.html

到了这里,关于鸿蒙前后端互联实现接收发送数据+MySQL数据库(简单示例)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • QT三驾马车(一)——实现上位机(串口数据发送和接收)

    以后同学们做项目一定会用到QT的三驾马车,QT的三驾马车即QT的串口编程,QT的网络编程和QT的GPIO,今天我们通过一个项目来介绍第一部分,QT的串口编程。 之前看过很多相关的文章,但是按照顺序来编译总是会出错,可是我自己还找不到原因,对于我这种新手小白来说极其

    2024年02月15日
    浏览(46)
  • 使用ArduinoMqttClient库连接阿里云,并实现发送接收数据(ESP8266)

    阿里云物联网平台的接入方式有很多种,从阿里云提供的开发文档可以看到,支持的接入协议有MQTT、HTTPS、CoAP、JT/808、GB/32960协议等等,并支持多种类型的设备接入。 对于阿里云物联网平台的接入,网上有许许多多的教程,有亲测有效的,表示感谢;也些教程留了有一些bu

    2024年02月02日
    浏览(35)
  • go内置库函数实现client与server数据的发送接收

    功能:客户端持续写入数据,直到输入exit退出,服务端读取数据并打印 注意:server和client目录在同一层级 server/main client/main go开启协程,数据写入结束向管道输入信号,主线程获取信号,退出。否则主线程运行结束会直接退出

    2024年02月19日
    浏览(38)
  • 【PHP】PHP实现与硬件串口交互,接收硬件发送的实时数据

    目的:借助虚拟串口软件(VSPD)模拟硬件串口发送数据,使用PHP语言实现接收硬件发送的数据。 我这里的需求是连接天平,把天平的称量数据实时的传送到PHP使用。 使用工具:vspd+串口调试工具 使用语言:PHP 使用到的工具有VSPD和串口调试工具,其中VSPD是模拟硬件串口,串

    2024年02月02日
    浏览(34)
  • uni-app实现跨端开发手机蓝牙接收和发送数据

    最近接触uni-app夸终端开发手机蓝牙模块的接收和发送数据功能, 手机蓝牙模块接发收数据主要流程步骤如下: 1、初始化手机蓝牙 2、根据设备id获取蓝牙服务, 3、根据蓝牙服务获取对应的蓝牙特征值 4、监听蓝牙特征值数值变化,发送对应数据到蓝牙特征值 具体

    2024年02月12日
    浏览(48)
  • esp8266模块--MQTT协议连接服务器实现数据接收和发送+源码

    首先推荐中国移动的代码,我觉得中国移动的代码更为合理:(但是有一些其他的模块在里面) OneNET开发板代码、资料--2020-09-27--标准板、Mini板bug修复 - 开发板专区 - OneNET设备云论坛 (10086.cn) 以及这位b站up做的视频:(wifi模块在p9节) 【挽救小白第一季】STM32+8266+小程序智能

    2024年02月08日
    浏览(63)
  • STM32407 FreeRtos系统下lwip实现发送和接收数据包进行链路测试

    下面是一个基于STM32F407 FreeRTOS系统下lwIP实现发送和接收数据包进行链路测试的案例。 硬件配置和软件环境搭建 首先,需要准备好STM32F407开发板、以太网网线和一台电脑,然后在电脑上安装好STM32CubeMX工具和Keil MDK软件,创建一个新的工程,并按照以下步骤进行配置: 1)选择

    2024年02月12日
    浏览(36)
  • STM32使用三种方式(阻塞、中断、DMA)实现串口发送和接收数据

    记录下学习STM32开发板的心得的和遇见的问题。 板卡型号:STM32F405RGT6 软件:STM32CubeMX、IAR STM32串口外设提供了3种接收和发送方式:阻塞、中断、DMA,主要给大家分享中断方式接收不定长数据和DMA使用空闲中断接收不定长数据。 阻塞发送: 阻塞接收: 两个函数需要注意的就

    2024年02月03日
    浏览(51)
  • 网络通信/QTcpSocket/实现一个可在子线程中发送和接收数据的TCP客户端

    近来一直接使用WinSocket做网络编程,有很长一段时间不再使用Qt框架下的相关网路通信类。有不少之前积压的问题直到现在也没怎么弄清楚,在CSDN中乱七八糟的存了好几篇草稿,亟待整理。最近要写一个简单地相机升级程序,于是重操旧业。 网络通信中,尤其是在收发工作较

    2024年02月08日
    浏览(54)
  • arkTS开发鸿蒙OS应用(登录页面实现,连接数据库)

    喜欢的朋友可在抖音、小红书、微信公众号、哔哩哔哩搜索“淼学派对”。知乎搜索“编程淼”。

    2024年03月24日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包