API低代码平台介绍5-数据库记录修改功能

数据库记录修改功能

  在上篇文章中我们介绍了如何插入数据库记录,本篇文章会沿用上篇文章的测试数据,介绍如何使用ADI平台定义一个修改目标数据库记录的接口,包括 单主键单表修改、复合主键单表修改、多表修改(整合前两者)三种方式。无论是单表修改还是多表修改,任何一条记录修改失败,那么默认情况下API平台的整个数据修改事务都将自动回滚。

1.需求说明

  根据前续文章的例子,我们已经实现把幢数据和户数据插入市大数据局的数据库表中。假设数据局提出了新要求:当业务系统的幢和户数据发生修改时,要对已归集到数据局的数据做同步修改。首先让我们回顾下dsj数据库中幢和户的表结构。
dsj数据库的幢表名为dsj_zhuangs,建表语句如下:

create table dsj_zhuangs
(xh bigint(20) not null primary key auto_increment comment '幢序号',zhdjdydm   varchar(50) not null comment '幢登记单元代码',zl varchar(100) comment '幢坐落'  
);
alter table dsj_zhuangs add unique (zhdjdydm);

dsj数据库的户表名为dsj_hus,建表语句如下:

create table dsj_hus
(xh bigint(20) not null primary key auto_increment comment '户序号',hdjdydm   varchar(50) not null comment '户登记单元代码',zhdjdydm  varchar(50) not null comment '所属幢登记单元代码',fbm  varchar(50) comment '房编码',qsc  int(4) comment '起始层',zhzhc  int(4) comment '终止层',fh varchar(50) comment '室号/部位',zl varchar(100) comment '房屋坐落',jzjg  varchar(50)  comment '建筑结构',ghyt  varchar(50)  comment '规划用途',jzmj double(18, 3) comment '建筑面积'
);alter table dsj_hus add unique (hdjdydm);-- 设置户表的外键:zhdjdydm
alter table dsj_hus add constraint hus_fk_zhdjdydm foreign key (zhdjdydm) references dsj_zhuangs(zhdjdydm);

接下来我们再回顾下之前已经写入dsj数据库的数据。
幢表(dsj_zhuangs)数据:
在这里插入图片描述

户表(dsj_hus)数据:
在这里插入图片描述

2.单主键单表修改幢数据

所谓单主键,是指我们要根据这个表的某一个字段作为where条件,来更新对应记录的其它字段;这个字段可以不是数据库表真正的主键,它可以是一个唯一键,甚至连唯一键都可以不是(如果不是唯一键或主键,就可以批量更新数据),大家更新实际的场景做选择即可,我们这里以幢表的zhdjdydm(幢登记单元代码)字段作为更新条件。

2.1 实现对dsj_zhuangs表的修改

要通过API平台修改数据库表的数据,那么json报文的根节点必须有一个和表名相同的节点名称,即dsj_zhuangs(大小写不敏感),且节点下必须包含主键字段名和字段值,主键字段值是不会被修改的;报文结构如下:

{"dsj_zhuangs": [{"zhdjdydm": "幢登记单元代码/不动产单元号","zl": "幢坐落"}]
}

dsj_zhuangs节点可以是一个json对象(意味着只能修改单个幢的记录)或者是一个json数组(意味着可以修改多个幢的记录),每个json对象的属性值必须和数据库表的字段名相同(大小写不敏感);要修改哪些字段,我们就在节点中放哪些字段,没有在节点中传递的字段是不会被修改的。

2.1.1 在API平台定义一个PUT路由

路由编码可定义为updateZhuang2dsj,意思是修改大数据平台的幢数据。如图:
在这里插入图片描述

注意调用方式选择put。

2.1.2 在路由下定义一个分享设置

在分享设置中填写大数据平台的数据库(即目标库)连接方式。如图:
在这里插入图片描述

2.1.3 在分享设置中定义目标库的数据库表

点击分享设置后面的[表定义]。如图:
在这里插入图片描述

在表定义界面点击[新增],填写以下字段,如图:
在这里插入图片描述
注意这里的主键字段要填写zhdjdydm,因为我们要根据已知的zhdjdydm来修改表记录;这里填写的主键字段是不会被接口修改的。

填写完成后点击保存即可。如图:
在这里插入图片描述
点击[字段信息],如图:
在这里插入图片描述
这里的字段信息默认是该表的所有字段,同时意味着接口调用者可以发送这些字段,如果我们不想由接口调用者传入自增主键的值,那么应该在这里把"xh"字段删除。

2.1.4 调用接口完成幢表数据修改

打开在线接口文档,如图所示:
在这里插入图片描述

在这里插入图片描述

我们填写以下json数据:

{"dsj_zhuangs": [{"zhdjdydm": "110108001001GB00001F0001","zl": "北京市海淀区曙光中路曙光花园智业园1幢(修改)"},{"zhdjdydm": "110108001001GB00001F0002","zl": "北京市海淀区曙光中路曙光花园智业园2幢(修改)"}]
}

我们在坐落后加上"(修改)"来演示修改效果,实际业务中,大家根据实际情况传值即可。
点击[试一下],如图所示:
在这里插入图片描述

可以看到接口调用成功了,再看看dsj库里数据是否被修改了:
在这里插入图片描述

幢数据被成功修改。

3.复合主键单表修改户数据

所谓复合主键,是指我们要根据这个表的某几个字段作为where条件,来更新对应记录的其它字段;我们这里以户表的zhdjdydm(幢登记单元代码)和hdjdydm(户登记单元代码)字段作为更新条件。

3.1 实现对dsj_hus表的修改

要通过API平台修改数据库表的数据,那么json报文的根节点必须有一个和表名相同的节点名称,即dsj_hus(大小写不敏感),且节点下必须包含主键字段名和字段值,报文结构如下:

{"dsj_hus": [{"zhdjdydm": "110108001001GB00001F0001","hdjdydm": "110108001001GB00001F00010003","zl": "北京市海淀区曙光中路曙光花园智业园1幢B座1-103","jzjg": "钢结构"}, {"zhdjdydm": "110108001001GB00001F0001","hdjdydm": "110108001001GB00001F00010004","zl": "北京市海淀区曙光中路曙光花园智业园1幢B座1-104","jzjg": "钢结构"}]
}

dsj_hus节点可以是一个json对象(意味着只能修改单个户的记录)或者是一个json数组(意味着可以修改多个户的记录),每个json对象的属性值必须和数据库表的字段名相同(大小写不敏感);要修改哪些字段,我们就在节点中放哪些字段,没有在节点中传递的字段是不会被修改的。

3.1.1 在API平台定义一个PUT路由

路由编码可定义为updateHu2dsj,意思是修改大数据平台的户数据。如图:
在这里插入图片描述

注意调用方式选择put。

3.1.2 在路由下定义一个分享设置

在分享设置中填写大数据平台的数据库(即目标库)连接方式。如图:
在这里插入图片描述

3.1.3 在分享设置中定义目标库的数据库表

在表定义界面点击[新增],填写以下字段,如图:
在这里插入图片描述

注意这里的主键字段要填写"zhdjdydm,hdjdydm" ,因为我们要根据已知的zhdjdydm和hdjdydm来修改表记录;多个字段使用逗号隔开。

填写完成后点击保存即可。如图:
在这里插入图片描述
点击[字段信息],如图:
在这里插入图片描述

这里的字段信息默认是该表的所有字段,同时意味着接口调用者可以发送这些字段,如果我们不想由接口调用者传入自增主键的值,那么应该在这里把"xh"字段删除(截图中我已经删除了)。

3.1.4 调用接口完成户表数据修改

打开在线接口文档,如图所示:
在这里插入图片描述

在这里插入图片描述

我们填写以下json数据:

{"dsj_hus": [{"zhdjdydm": "110108001001GB00001F0001","hdjdydm": "110108001001GB00001F00010003","zl": "北京市海淀区曙光中路曙光花园智业园1幢B座1-103(修改)","jzjg": "钢结构(修改)"}, {"zhdjdydm": "110108001001GB00001F0001","hdjdydm": "110108001001GB00001F00010004","zl": "北京市海淀区曙光中路曙光花园智业园1幢B座1-104(修改)","jzjg": "钢结构(修改)"}]
}

我们在相关字段值后加上"(修改)"来演示修改效果,实际业务中,大家根据实际情况传值即可。
点击[试一下],如图所示:
在这里插入图片描述

可以看到接口调用成功了,再看看dsj库里数据是否被修改了:
在这里插入图片描述

户数据被成功修改。

3.1.5 如果接口报错是怎样的?

我们在请求报文中填写以下json数据:

{"dsj_hus": [{"zhdjdydm": "110108001001GB00001F0001","hdjdydm": "110108001001GB00001F00010003","zl": "北京市海淀区曙光中路曙光花园智业园1幢B座1-103(修改2)","jzjg": "钢结构(修改2)"}, {"zhdjdydm": "110108001001GB00001F0001-1","hdjdydm": "110108001001GB00001F00010004","zl": "北京市海淀区曙光中路曙光花园智业园1幢B座1-104(修改2)","jzjg": "钢结构(修改2)"}]
}

首先,我们故意把第2个户的zhdjdydm字段值改为"110108001001GB00001F0001-1",这是一个目标数据库中不存在的字段值;然后,我们把其它字段值后面加上"修改2",来演示修改效果。
主要是观察接口是否会报错?如果报错,报错信息是什么样的?如果报错,事务会自动回滚吗?
点击[试一下],如图所示:
在这里插入图片描述
可以看到,接口报错了,并且错误信息如下:

{"type": "fail","data": "数据更新失败,validateParams4Mod校验失败,根据数据库表[dsj_hus]的主键[zhdjdydm,hdjdydm]值[{zhdjdydm=110108001001GB00001F0001-1, hdjdydm=110108001001GB00001F00010004}]未查询到待更新的记录-uuid[aebf9f]","uuid": "aebf9fe9aa164289b726881244621879"
}

错误提示信息非常明显的告诉我们是哪一条数据出现了问题,方便您进行问题排查。
我们再看看数据库的情况:
在这里插入图片描述
可以看到没有任何记录被修改了,说明我们的事务自动回滚了。

4.多表修改(整合前两者)

所谓多表修改,是指我们通过一个接口实现对多张表的修改操作。我们上一篇文章已经知道如何实现多表插入,其实多表修改、多表删除都是相同的道理,我们只需要在一个分享设置下进行表定义的时候把这些表都定义进去即可。

4.1 在API平台复制一个PUT路由

我们可以通过复制前面已经定义好的updateZhuang2dsj或updateHu2dsj路由,来得到一个新路由。我们这里选择对updateHu2dsj进行复制,如图:
在这里插入图片描述
得到新路由:
在这里插入图片描述

4.2 在分享设置中定义目标库的数据库表dsj_zhuangs

复制之后已经有dsj_hus的表定义了,我们追加dsj_zhuangs的表定义即可。如图:
在这里插入图片描述
由于这里不需要强制的先后更新顺序,因此两个表的写入顺序可以相同也可以不同。

4.3 调用接口完成幢表和户表数据修改

打开在线接口文档,如图所示:
在这里插入图片描述
由于要同时修改两张表的数据,因此填写的json报文结构如下:

{"dsj_zhuangs": [{"zhdjdydm": "110108001001GB00001F0001","zl": "北京市海淀区曙光中路曙光花园智业园1幢"},{"zhdjdydm": "110108001001GB00001F0002","zl": "北京市海淀区曙光中路曙光花园智业园2幢"}],"dsj_hus": [{"zhdjdydm": "110108001001GB00001F0001","hdjdydm": "110108001001GB00001F00010003","zl": "北京市海淀区曙光中路曙光花园智业园1幢B座1-103","jzjg": "钢结构"}, {"zhdjdydm": "110108001001GB00001F0001","hdjdydm": "110108001001GB00001F00010004","zl": "北京市海淀区曙光中路曙光花园智业园1幢B座1-104","jzjg": "钢结构"}]
}

通过报文可以知道,我们这里计划把前面修改过的幢坐落、户坐落、户建筑结构给改回去。
点击[试一下],如图所示:
在这里插入图片描述
可以看到接口调用成功,现在让我们去看看库里的数据,
幢表:
在这里插入图片描述
户表:
在这里插入图片描述
幢表和户表都更新成功了。

5.总结

  到这里,对单主键单表、复合主键单表、多表的修改功能介绍就完成了,无论是哪一种,只要是一个分享设置下的操作,都会确保在同一个事务中执行,一旦发生异常都会自动回滚。另外,我们这里演示的都是手工组装报文进行测试,在实际工作中,大家可以参考上一篇文章的方式,通过API平台自动组装报文并完成数据修改。
  后续我将继续介绍ADI平台其它的重要功能,谢谢大家的阅读!

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

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

相关文章

每日练题(py,c,cpp).6_19,6_20

检验素数 from math import sqrt a int(input("请输入一个数:")) for i in range(2,int(sqrt(a))):if a%i 0:print("该数不是素数")breakelse: print("该数是素数")# # 1既不是素数也不是合数 # #可以用flag做标志位 # b int(…

VUE element-ui之table表格横向展示(表尾汇总)_elementui横向表格

</el-table><section><el-table:show-header“false” :data“tableDataBll” border style“width: 100%;” <el-table-column prop"total" align"center" /><el-table-column prop"totalOrder" /><el-table-col…

视频智能分析平台智能边缘分析一体机安防监控平台打手机检测算法工作原理介绍

智能边缘分析一体机的打手机检测算法是一种集成了计算机视觉和人工智能技术的先进算法&#xff0c;专门用于实时监测和识别监控画面中的打手机行为。以下是关于该算法的详细介绍&#xff1a; 工作原理 1、视频流获取&#xff1a; 智能边缘分析一体机首先通过连接的视频监控设…

国内composer镜像有哪些

阿里云 Composer 全量镜像 镜像地址: https://mirrors.aliyun.com/composer/官方地址: https://mirrors.aliyun.com/composer/index.html镜像类型: 全量镜像更新时间: 1分钟备注: 阿里云CDN加速&#xff0c;更新速度快&#xff0c;推荐使用。腾讯云 Composer 全量镜像 镜像地址…

【UIDynamic-动力学-附着行为-刚性附着 Objective-C语言】

一、接下来,我们来说这个附着行为啊, 1.我们之前举过例子,一个车坏了,另外一个车,拉着这个车,就是附着行为啊, 这个里边呢,我们新建一个项目, Name:09-附着行为-刚性附着, 附着行为呢,分为两个大类: 1)刚性附着 2)弹性附着 刚性附着,指的就是,两个物体之间…

lftp工具速成

登录 lftp user:passwd192.168.0.123:21显示 ls设置本地目录 lcd /home/xxx/ftp下载 // 下载文件 get 1.log// 下载多个文件 mget *.log// 下载目录 mirror dir_name上传 // 下载文件 put 1.log// 下载多个文件 mput *.log// 下载目录 mirror -R dir_name退出 exit

三人同行免单模式:社交电商的新趋势

在当今社交电商日益繁荣的背景下&#xff0c;三人同行免单模式作为一种创新的购物激励机制&#xff0c;正逐渐受到消费者和品牌的青睐。该模式通过消费者之间的互动和分享&#xff0c;促进产品销售和品牌推广&#xff0c;实现消费者与品牌的双赢。 模式概述 三人同行免单模式的…

企业级WordPress开发 – 创建企业级网站的优秀技巧

目录 1 “企业级”一词是什么意思&#xff1f; 2 使用 WordPress 进行企业级 Web 开发有哪些好处&#xff1f; 3 使用 WordPress 进行企业级开发的主要好处 3.1 WordPress 可扩展、灵活且价格实惠 3.2 WordPress 提供响应式 Web 开发 3.3 WordPress 提供巨大的可扩展…

vue2 使用 tailwind css vscode 100%成功

环境 vue -V ---- vue/cli 5.0.8 node -v ----- v16.15.0 npm -v ----- 6.14.18 环境不一样可能不会100%成功哦 创建项目 vue create tailwind 选择vue2 修改package.json "dependencies": {"babel/eslint-parser": "^7.24.7"…

关于时代变迁的小讨论

大家好&#xff0c;我是阿赵。   今天接到一个电话&#xff0c;是中国移动打过来的。这个电话的目的很简单&#xff0c;说免费送给我每个月100g流量和1000分钟通话时长&#xff0c;总共12个月。这个优惠也没什么苛刻的条件&#xff0c;只需要在这12个月内不要转运营商或者注销…

网络流量 数据包length计算

MTUMSSIP header(20 bytes)tcp header(20 bytes) lengthMTUEthernet header(14bytes) 其中MSS为Maximum Segment Size&#xff0c;即最大报文段长度&#xff0c;其受MTU大小影响&#xff0c;这里的MTU指的是三层的&#xff0c;二层的MTU固定为1500&#xff0c;不能修改。 MT…

编译报错:No rule to make target xx/libcam.halmemory_intermediates/export_includes

问题现象&#xff1a; make: *** No rule to make target ‘out/target/product/testdd6737m_35g_m0/obj/STATIC_LIBRARIES/libcam.halmemory_intermediates/export_includes’, needed by ‘out/target/product/testdd6737m_35g_m0/obj/SHARED_LIBRARIES/libcam_platform_inte…

PowerShell 是什么?它的作用都有哪些?

什么是 PowerShell PowerShell 是什么&#xff1f;PowerShell 是一种跨平台的任务自动化和配置管理框架&#xff0c;最初由微软开发并主要用于 Windows 环境。它结合了命令行界面和脚本语言功能&#xff0c;可以帮助用户执行系统管理任务和自动化流程。 PowerShell 的强大之处…

MySQL—索引—基础语法

目录 一、创建、查看以及删除索引的语法 &#xff08;1&#xff09;创建索引 1、会用到一个关键字&#xff1a;CREATE。 2、解释。 &#xff08;2&#xff09;查看索引 1、查看索引需要用到一个关键字&#xff1a;SHOW。 2、作用是去查看指定表中的所有索引。 &#xff…

樱花飘落

文章目录 樱花飘落导入模块和设置屏幕定义树枝绘制函数计算树枝参数绘制左右分支绘制树叶和飘落效果定义樱花绘制函数绘制樱花并定时重复设置屏幕和绘制树开始樱花动画启动事件循环 屏幕录制 2024-06-21 155836 樱花飘落 导入模块和设置屏幕 通过递归函数tree绘制了一棵分形的…

Ollama部署大模型并安装WebUi

Ollama用于在本地运行和部署大型语言模型&#xff08;LLMs&#xff09;的工具&#xff0c;可以非常方便的部署本地大模型 安装 Linux curl -fsSL https://ollama.com/install.sh | sh 我是ubuntu系统安装&#xff0c;其他系统可以看项目的开源地址有写 GitHub - ollama/oll…

Autosar规范的ARM内核平台/PowerPC内核平台的微控制器的开发解决方案

Autosar规范的ARM内核平台/PowerPC内核平台的微控制器的开发解决方案 Autosar规范的ARM内核平台/PowerPC内核平台的微控制器的开发解决方案 目录 引言Autosar简介ARM内核平台的开发解决方案 3.1 ARM架构概述3.2 Autosar在ARM平台的实现3.3 典型的ARM微控制器3.4 开发工具和环…

html渲染的文字样式大小不统一解决方案

React Hooks 封装可粘贴图片的输入框组件&#xff08;wangeditor&#xff09;_react 支持图片拖拽的输入框-CSDN博客 这篇文章中的wangediter可粘贴图片的输入框&#xff0c;输入的文字和粘贴的文字在dangerouslySetInnerHTML渲染后出现了字体不统一的情况 在html中右键检查可…

zerotier-one自建根服务器方法二

一、简介 zerotier-one免费账户有25设备的限制&#xff0c;如果自己的设备多了就需要付费。不过zerotier-one是开源软件&#xff0c;我们可以自己建立根服务器&#xff0c;不用付费速度还很快。 由于时间关系上一篇文章没有写完&#xff0c;今天继续。 二、准备工作 准备一…

postman测试接口使用

背景&#xff1a; 隔了一段时间没有用postman&#xff0c;有些忘记了&#xff0c;谨以此文来记录postman的使用&#xff0c;如有忘记就可以快速回忆 使用&#xff1a; 点击这个号&#xff0c;是创建接口页面 这里的复选框可供我们选择接口的rest方式 请求路径&#xff1a; …