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平台其它的重要功能,谢谢大家的阅读!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

1.接口测试-postman学习

目录 1.接口相关概念2.接口测试流程3.postman基本使用-创建请求(1)环境(2)新建项目集合Collections(3)新建collection(4)新建模块(5)构建请求请求URLheader设…

pretender:一款功能强大的红队MitM安全测试工具

关于pretender pretender是一款功能强大的红队MitM安全测试工具,该工具专为红队研究人员设计,该工具不仅能够进行MitM和中继攻击,而且还支持执行DHCPv6 DNS接管以及mDNS、LLMNR和NetBIOS-NS欺骗攻击。在该工具的帮助下,广大研究人…

学生护眼大路灯应该怎么选?五款护眼大路灯对比推荐

我们都知道光线无处不在,想要减少近视隐患,就不得不提一下护眼灯了,特别是经常坐在电脑前码字的上班族以及深夜还在学习的学生党这一类人群,经常用眼光线不好不仅影响视力健康,还会影响效率。而一款护眼灯能够提供柔和…

Vue的学习之安装Vue

目录 一、Vue的特点 二、Vue的学习 一、Vue的特点 1.采用组件化模式(xxx.vue包含htmlcssjs) 2.声明式编码,编码人员无需直接操作DOM,提高开发效率 3.使用虚拟DOM优秀的DIFF算法(DIFF是用于新旧虚拟DOM的比较&#…

Adobe Dimension(Dn)下载:附安装包+详细教程

Adobe Dimension常常被简称为Adobe DN,它是一款三维建模设计软件,能让图形设计工作者在平面基础上构建高质量、高逼真的3D图像,将2D/3D构建成可视化场景。除此之外,它还能与 Photoshop和Illustrator等软件紧密的结合起来&#xff…

autodeauth:一款功能强大的自动化Deauth渗透测试工具

关于autodeauth autodeauth是一款功能强大的自动化Deauth渗透测试工具,该工具可以帮助广大研究人员以自动化的形式针对本地网络执行Deauth渗透测试,或者枚举公共网络。当前版本的autodeauth已在树莓派OS和Kali Linux平台上进行过测试,之后的…

易宝OA downloadfile 任意文件读取

【产品&&漏洞简述】 易宝OA系统是一种专门为企业和机构的日常办公工作提供服务的综合性软件平台,具有信息管理、 流程管理 、知识管理(档案和业务管理)、协同办公等多种功能 易宝OA downloadfile 文件读取,攻击者可通过…

Spring Boot 集成 MinIO 实现文件上传

Spring Boot 集成 MinIO 实现文件上传 一、 Minio 服务准备 MinIO的搭建过程参考 Docker 搭建 MinIO 对象存储。 登录MinIO控制台&#xff0c;新建一个 Bucket&#xff0c;修改 Bucket 权限为公开。 二、MinIO 集成 添加 MinIO 依赖 <!-- https://mvnrepository.com/ar…

难辨真假的Midjourney案例(附提示词):适合练手

人物 时尚女孩 Street style fashion photo, full-body shot of a young Chinese woman with long curly black hair, walking confidently with a crowd of people down a sidewalk in Hong Kong, wearing a emerald green Gucci maxi dress & gold jewelry, sunset lig…

英伟达和IBM搞事情!主攻“量子计算+AI”

内容来源&#xff1a;量子前哨&#xff08;ID&#xff1a;Qforepost&#xff09; 文丨娴睿/慕一 排版丨沛贤 深度好文&#xff1a;2000字丨8分钟阅读 Ismael Faro是一位计算机工程师&#xff0c;自2015年以来&#xff0c;他就成为开发IBM量子软件生态系统的重要人物。从2016…

2748. 美丽下标对的数目(Rust暴力枚举)

题目 给你一个下标从 0 开始的整数数组 nums 。如果下标对 i、j 满足 0 ≤ i < j < nums.length &#xff0c;如果 nums[i] 的 第一个数字 和 nums[j] 的 最后一个数字 互质 &#xff0c;则认为 nums[i] 和 nums[j] 是一组 美丽下标对 。 返回 nums 中 美丽下标对 的总…

DualSPHysics运行报错ERROR: Some boundary particle was excluded.

如下查看输出&#xff0c;看到报错ERROR: Some boundary particle was excluded.某些边界粒子超出了模拟域的X限制&#xff08;右限制&#xff09;&#xff0c;具体错误的边界溢出粒子储存在Error_BoundaryOut.vtk里边。 用paraview打开Error_BoundaryOut.vtk还有边界的stl&am…

React路由笔记(函数组件,自用)

配置 npm i react-router-dom基本使用 目录结构 在src中创建page文件夹放置各页面组件&#xff0c;router中放置路由 1、router中配置路由 在/router/index.js中&#xff0c;使用createBrowserRouter配置路由。 import { createBrowserRouter } from "react-router…

mybatis框架相关问题总结(本地笔记搬运)

1、背景 2、运行启动问题 问题一 运行spring boot项目时报错&#xff1a;‘factoryBeanObjectType‘: java.lang.String 解决一 版本问题&#xff0c;springframework版本和mybatis/mybatis-plus版本不兼容。现spring-boot使用3.3.0版本&#xff0c;mybatis-plus使用3.5.7…

js处理数据(过滤)

复选框的值这里为true或false 选中为true&#xff0c;未选中为false 看看数据&#xff1a; type中的前面那些字母是固定的不会变 括号里面的不固定&#xff0c;那就把固定的作为前缀去过滤&#xff0c;后面怎么变都无所谓&#xff0c;当checkbox三个值中的某个或某些值为false时…

如何使用LiveTargetsFinder生成实时活动主机URL列表

关于LiveTargetsFinder LiveTargetsFinder是一款功能强大的实时活动主机生成工具&#xff0c;该工具可以为广大研究人员以自动化的形式生成可供分析和测试的实时活动主机URL列表&#xff0c;并通过MassDNS、Masscan和Nmap自动过滤出无法访问的主机。 我们只需要提供一个域名作…

视频融合共享平台LntonCVS视频监控管理平台技术方案详细介绍

LntonCVS国标视频综合管理平台是一款以视频为核心的智慧物联应用平台。它基于分布式、负载均衡等流媒体技术进行开发&#xff0c;提供广泛兼容、安全可靠、开放共享的视频综合服务。该平台具备多种功能&#xff0c;包括视频直播、录像、回放、检索、云存储、告警上报、语音对讲…

【数据分享】《中国改革年鉴》1989-2022

最近老有同学过来询问《中国经济体制改革年鉴》、《中国改革年鉴》这两本数据的关系以及怎么获取这两本本数据。今天就在这里给大家分享一下这三本数据的具体情况。 《中国改革年鉴》由国家发展和改革委员会主管,中国经济体制改革研究会主办,中国经济体制改革杂志社编辑出版,是…

大数据存储技术笔记

目录 大数据的特性 HDFS 读流程的基本步骤 HDFS 写流程的基本步骤 Mapreduce的执行过程 MapReduce 中 combiner 作用 hadoop 调度器及其工作方法 Hive 中内部表与外部表区别(创建删除角度) Hadoop 的 2 个主要组件及其功能 Hadoop MapReduce 的工作流程 正常工作的 ha…

Jmeter性能 之 “查看结果树” 界面功能介绍

前言 查看结果树 显示所有请求响应的树&#xff0c;通过它可以查看任何请求的响应。除了显示响应之外&#xff0c;还可以查看获取响应所花费的时间以及一些响应代码。需要通过"查看结果树"来查看服务器处理请求之后的返回结果&#xff0c;分析是否存在问题 注意&am…