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

news2024/11/24 18:32:18

数据库记录修改功能

  在上篇文章中我们介绍了如何插入数据库记录,本篇文章会沿用上篇文章的测试数据,介绍如何使用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.coloradmin.cn/o/1846220.html

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

相关文章

Java图形用户界面设计AWT事件处理

AWT事件处理 前言一、GUI事件处理机制定义使用步骤Swing事件处理机制与AWT的区别 二、GUI中常见事件和事件监听器事件低级事件高级事件 事件监听器AWT事件类的继承关系 三、事件适配器三、示例代码示例示例一示例二 示例三 前言 推荐一个网站给想要了解或者学习人工智能知识的…

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

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

算力服务先锋!和鲸科技入选《2024中国智算产业生态图谱》

2024 年 6 月 18 日,由科智咨询发起的《2024中国智算产业生态图谱》正式发布,依托 ModelWhale 构建的智算算力资源服务,以及深耕多年的 ModelWhale 数据科学协同平台优势,和鲸科技成功入选。 “智算时代”技术不断进步&#xff0c…

生产实习Day13 ---- 神经网络模型介绍

文章目录 传统的神经网络模型注意力机制的引入注意力机制的本质Encoder-Decoder 框架注意力机制在 Encoder-Decoder 中的应用Self-Attention 机制Transformer 模型注意力机制的优势总结 传统的神经网络模型 在深度学习中,传统的神经网络模型,如循环神经…

react学习——09react中props属性

1、基本使用 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><!-- 移动端适配--><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>1_props基…

【前端vue3】TypeScrip-基础类型和任意类型

安装TypeScript npm install typescript -g 运行tsc -v可查看当前版本 为了方便调试可以安装 先安装小满zs大神写的工具&#xff0c;可以切换下载源 npm i xmzs -g 安装成功后 使用mmp ls查看当前的源有哪些 使用 mmp use选择镜像源 切换成功后&#xff0c;安装TypeScrip…

【51单片机】按键的操作

文章目录 前言读取按键的原理proteus仿真示例代码 总结 前言 在现代电子产品中&#xff0c;按键是用户与设备之间交互的重要组成部分。它们允许用户通过简单的按下来触发特定的操作或命令。在微控制器的背景下&#xff0c;按键的设计和操作对于确保设备的响应性和用户体验至关…

「ClickHouse 极简教程」分布式下的 IN/JOIN 及 GLOBAL关键字

百度安全验证https://baijiahao.baidu.com/s?id1712073808973941124&wfrspider&forpc

NSSCTF-Web题目12

目录 [SWPUCTF 2021 新生赛]finalrce 1、题目 2、知识点 3、思路 [UUCTF 2022 新生赛]ez_rce 1、题目 2、知识点 3、思路 [羊城杯 2020]easycon 1、题目 2、知识点 3、思路 [SWPUCTF 2021 新生赛]finalrce 1、题目 2、知识点 命令执行&#xff0c;tee命令 3、思路…

springboot家乡特色推荐系统 LW +PPT+源码+讲解

3系统需求分析 3.1系统功能 通过前面的功能分析可以将家乡特色推荐系统的功能分为管理员和用户两个部分&#xff0c;系统的主要功能包括首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;文章分类管理&#xff0c;文章分享管理&#xff0c;系统管理等内容。任何用户…

五谷杂粮店铺小程序的作用是有什么

大米、面粉、荞麦、豆类等多种五谷杂粮商品可以说是必需&#xff0c;线下门店或摊位数量也不乏&#xff0c;但相比较流量较为固定且销售模式单一&#xff0c;想要进一步扩大生意效果却是不易。 线上是商家重点增长的场景&#xff0c;五谷杂粮商品自然也适合开展零售批发生意&a…

Leetcode - 周赛402

目录 一&#xff0c;3185. 构成整天的下标对数目 II 二&#xff0c;3186. 施咒的最大总伤害 三&#xff0c;3187. 数组中的峰值 一&#xff0c;3185. 构成整天的下标对数目 II 这里的T1&#xff0c;T2是一个题&#xff0c;这里直接一起讲了&#xff0c; 当我们已知 x%24 的值…

NGINX_十八 nginx 访问控制

十八 nginx 访问控制 1 nginx 访问控制模块 &#xff08;1&#xff09;基于IP的访问控制&#xff1a;http_access_module &#xff08;2&#xff09;基于用户的信任登录&#xff1a;http_auth_basic_module 2 基于IP的访问控制 2.1 配置语法 Syntax&#xff1a;allow addr…

实现一个动态规划算法,解决背包问题

public class Test_31 {// 动态规划解决0-1背包问题public int knapsack(int capacity, int[] weights, int[] values, int n) {// 创建一个二维数组dp&#xff0c;用于记录状态转移过程int[][] dp new int[n 1][capacity 1];// 遍历物品for (int i 1; i < n; i) {// 遍…

73. UE5 RPG 优化投射物以及敌人生成

解决发射物会与地面产生交互的问题 之前一直遇到发射物的体积过大会在发射时&#xff0c;和地面产生交互&#xff0c;我们可以调整小一些&#xff0c;然后为了防止它和自身产生交互事件。我们可以实现它在生成后&#xff0c;不会触发相关事件&#xff0c;而是在一定时间后。 对…

编码RNA Terc-53和透明质酸受体Hmmr可调节小鼠的衰老

近期&#xff0c;厦门大学王耿教授团队在Protein & Cell&#xff08;IF21.1&#xff09;上发表题为“Noncoding RNA Terc-53 and hyaluronan receptor Hmmr regulate ageing in mice.”的研究。研究团队构建了一系列Terc-53小鼠模型&#xff0c;发现Terc-53小鼠表现出与年龄…

如何开发一个项目脚手架cli

目录 背景正文unbuildpromptsprogresskolorist 设置打包命令npm execnpxnpm init/ npm create/ npm innit 使用最后 背景 随着团队项目类型越来越多&#xff0c;方便后续快速去开发项目&#xff0c;会出现各种类型的项目模版项目。 这样开发只需要通过脚手架选择自己需要的项目…

钒能新材料综合回收利用,钒溶液净化富集工艺之离子交换法

钒电池储能产业作为典型的绿色低碳优势产业&#xff0c;是新型储能领域重要发展方向。钒电池储能具备大规模、长周期等优势&#xff0c;是储能领域的重要组成部分&#xff0c;将成为拓展电能利用、应对可再生能源随机波动、支撑可再生能源高占比电力系统的最佳技术途径之一。 …

java连接mysql报错

1.背景&#xff0c;直接升级操作系统从centos-》国产化操作系统&#xff0c;mysql也升级到5.7.44 2&#xff0c;报错 Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server. Attempted reconn…

【JavaEE进阶】Spring统一功能处理:拦截器的使用

目录 1.什么是拦截器? 2.拦截器的使用 2.1定义拦截器 2.2 注册配置拦截器 3.拦截器详解 3.1 拦截路径 3.2 拦截器的执行流程 4. 使用拦截器实现登录校验 4.1 定义拦截器 4.2 注册配置拦截器 1.什么是拦截器? 拦截器是Spring框架提供的核心功能之⼀, 主要用来拦截用…