当前位置: 首页 > news >正文

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

相关文章:

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

数据库记录修改功能 在上篇文章中我们介绍了如何插入数据库记录,本篇文章会沿用上篇文章的测试数据,介绍如何使用ADI平台定义一个修改目标数据库记录的接口,包括 单主键单表修改、复合主键单表修改、多表修改(整合前两者&#xff…...

git commit撤销修改

背景 如果提交了代码,却发现有不需要提交的文件。这时候如何修改呢?可以用git reset指令。 git reset用法解释 git reset 命令用于回退版本,可以指定退回某一次提交的版本。 git reset 命令语法格式如下: git reset [--soft …...

深入理解RunLoop

RunLoop 是 iOS 和 OSX 开发中非常基础的一个概念,这篇文章将从 CFRunLoop 的源码入手,介绍 RunLoop 的概念以及底层实现原理。之后会介绍一下在 iOS 中,苹果是如何利用 RunLoop 实现自动释放池、延迟回调、触摸事件、屏幕刷新等功能的。 一…...

Elasticsearch term 查询:精确值搜索

一、引言 Elasticsearch 是一个功能强大的搜索引擎,它支持全文搜索、结构化搜索等多种搜索方式。在结构化搜索中,term 查询是一种常用的查询方式,用于在索引中查找与指定值完全匹配的文档。本文将详细介绍 term 查询的工作原理、使用场景以及…...

IntelliJ IDEA调试技巧

IntelliJ IDEA高级调试技巧 假设我们在UserService类的getUserAndCheckStatus方法中遇到了难以追踪的问题。以下是在IntelliJ IDEA中进行高效调试的一些进阶技巧: 1. 条件断点(Conditional Breakpoint) 如果你知道问题只在特定条件下出现&…...

NGINX_六 nginx 日志文件详解

六 nginx 日志文件详解 nginx 日志文件分为 **log_format** 和 **access_log** 两部分log_format 定义记录的格式,其语法格式为log_format 样式名称 样式详情配置文件中默认有log_format main $remote_addr - $remote_user [time_local] "req…...

第6章 工程项目融资 作业

第6章 工程项目融资 作业 一单选题(共2题,40分) (单选题) 项目资金结构不包括( )。 A.项目债务资金结构比例 B. 项目建设投资与工程项目总成本费用的比例 C. 项目资本金内部结构比例 D. 项目资本金与债务资金的比例 正…...

网站安全防护怎么做?

引言:在当今数字化的时代,网络安全已经成为个人、企业乃至整个社会的一项关键挑战。随着互联网的普及和信息技术的迅猛发展,我们的生活和工作方式日益依赖于各种互联网服务和数据交换。然而,这种依赖也带来了越来越多的安全威胁和…...

泵设备的监测控制和智慧运维

泵是一种输送流体或使流体增压的机械。它通过各种工作原理(如离心、柱塞等)将机械能转换为流体的动能或压力能,从而实现液体的输送、提升、循环等操作。 泵的一些具体应用场景: 1.智能水务:在城市供水管网中&#xff…...

【智能算法应用】基于混合粒子群-蚁群算法的多机器人多点送餐路径规划问题

目录 1.算法原理2.数学模型3.结果展示4.参考文献5.代码获取 1.算法原理 【智能算法】粒子群算法(PSO)原理及实现 配餐顺序: 采用混合粒子群算法 || 路径规划: 采用蚁群算法 2.数学模型 餐厅送餐多机器人多点配送路径规划&…...

Java中的JVM调优技巧

Java中的JVM调优技巧 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! Java虚拟机(JVM)是Java应用程序的核心组件,负责将Jav…...

软件工程-第4章结构化编码和测试

软件的实现阶段:软件编码,单元测试和综合测试。 软件编码是对软件设计的进一步具体化,其任务是将设计表示变换成用程序设计语言编写的程序。 软件测试是软件质量保证的重要手段,要成功开发出高质量的软件产品,必须认…...

MMDetection 目标检测 —— 环境搭建和基础使用

参考文档 开始你的第一步 — MMDetection 3.3.0 文档 依赖 步骤 0. 下载并安装 Anaconda。 步骤 1. 创建并激活一个 conda 环境。(我选择的是python3.10) conda create --name openmmlab python3.8 -y conda activate openmmlab 步骤 2. 基于 PyTo…...

C# 实现draw一个简单的温度计

运行结果 概述: 代码分析 该控件主要包含以下几个部分: 属性定义: MinValue:最低温度值。 MaxValue:最高温度值。 CurrentValue:当前温度值。 构造函数: 设置了一些控件样式来提升绘制效果…...

解放双手,让流程自动化软件助你一臂之力

本文将介绍流程自动化软件/脚本/助手的用途,同时我也做个自我介绍: 🏆 技术专长:专注于自动化脚本、网站、小程序、软件、爬虫及数据采集的定制化开发,为客户提供全方位的数字化解决方案。 💼 行业经验&…...

邀请函 | 桥田智能出席AMTS展会 家族新成员正式发布

作为国际汽车制造技术与装备及材料专业展览会,AMTS将于2024年7月3-5日在上海新国际博览中心举行。本届展会以【向“新”而行 “智”领未来】为主题,聚焦汽车及新能源全产业链,围绕“车身工程、部件工程、新能源三电工程及未来汽车开发”等技…...

安卓开发使用proxyman监控真机

1、真机跟电脑连接到同个网络中 2、手机里面设置代理,代理地址为proxyman上面指示的地址。 3、一般情况下,电脑的对应的端口是没开放的。需要到防火墙里面新建规则。入站规则 选择端口输入上方端口号 这样就能监控到了...

ruoyi登录功能源码分析

Ruoyi登录功能源码分析 上一篇文章我们分析了一下若依登录验证码生成的代码,今天我们来分析一下登录功能的代码 1、发送登录请求 前端通过http://localhost/dev-api/login向后端发送登录请求并携带用户的登录表单 在后端中的com.ruoyi.web.controller.system包下…...

推动产业数字化转型,六个方面引领变革

从工业经济时代走向数字经济时代,世界经济发生着全方位、革命性的变化,产业数字化便是最显著的表现之一。当前,产业数字化不断深入发展,平台经济、工业互联网、智能制造等新业态、新模式不断涌现,成为了数字经济的重要…...

设施布置之车间布局优化SLP分析

一 物流分析(Flow Analysis) 的基本方法 1、当物料移动是工艺过程的主要部分时,物流分析就是工厂布置设计的核心工作,也是物料搬运分析的开始。 2、零部件物流是该部件在工厂内移动时所走过的路线, 物流分析不仅要考虑…...

帕金森的锻炼方式

帕金森病,这个看似陌生的名词,其实离我们并不遥远。它是一种常见的神经系统疾病,影响着许多中老年人的生活质量。虽然帕金森病目前尚无根治之法,但通过科学合理的日常锻炼,可以有效缓解病情,提高生活质量。…...

PyTorch(一)模型训练过程

PyTorch(一)模型训练过程 #c 总结 实践总结 该实践从「数据处理」开始到最后利用训练好的「模型」预测,感受到了整个模型的训练过程。其中也有部分知识点,例如定义神经网络,只是初步的模仿,有一个比较浅的…...

windows下cmd命令行模式中cd变换路径命令无效的解决办法

一,出现的情况 二,解决方法 当出现转换盘的时候打开 cmd 之后可能是无法生效的 ,因为在cmd 中转换盘首先需要用到换盘符 。 Solve1 : 先进行换盘 C: c: // 转换到 C盘 D: d: // 转化到 D盘 Solve2 : 直接进行强转 cd /dE:\ACM算法资源\XCP…...

收藏||电商数据采集流程||电商数据采集API接口

商务数据分析的流程 第一步:明确分析目的。首先要明确分析目的,并把分析目的分解成若干个不同的分析要点,然后梳理分析思路,最后搭建分析框架。 第二步:数据采集。主流电商API接口数据采集,一般可以通过数…...

修改源码,打patch包,线上环境不生效

1.首先看修改的源码文件是否正确 在node_modules中,找对应的包,然后查看包中package.json 的main和module。如果用require引入,则修改lib下面的组件,如果是import引入则修改es下面的文件 main 对应commonjs引入方式的程序入口文件…...

NUC980-OLED实现全中文字库的方法

1.背景 有一个产品,客户需要屏幕展示一些内容,要带一些中文,实现了OLED12864的驱动,但是它不带字库,现在要实现OLED全字库的显示 2.制作原始字库 下载软件pctolcd2002 设置 制作字库 打开原始文件 用软件自带的&…...

UEFI 启动原理及qemu 虚拟化中使用

UEFI 启动原理及qemu 虚拟化中使用 什么是BIOS?什么是 UEFI? 什么是BIOS? 计算机启动时会加载 BIOS,以初始化和测试硬件功能。它使用 POST 或 Power On Self Test 来确保硬件配置有效且工作正常,然后寻找存储引导设…...

35、正则表达式

一、正则表达式命令 正则表达式:匹配的是文本内容,linux的文本三剑客都是针对文本内容。 ​ grep 过滤文本内容 ​ sed 针对文本内容进行增删改查 ​ awk 按行取列 文本三剑客----都是按照行进行匹配。 1.1、grep筛选: grep的作用就是…...

Ubuntu20.04中复现FoundationPose

Ubuntu20.04中复现FoundationPose 文章目录 Ubuntu20.04中复现FoundationPose1.安装cuda和cudnn2.下载相关资源3.环境配置4.运行model-based demo5.运行ycbv demoReference 🚀 非常重要的环境配置 🚀 ubuntu 20.04cuda 11.8.0cudnn v8.9.7python 3.9.19…...

【Qt快速入门(四)】- QLabel文本框的使用

目录 Qt快速入门(四)- QLabel文本框的使用QLabel文本框的使用QLabel的基本用法1. 创建和设置文本2. 动态设置文本 设置文本样式1.设置字体和颜色2.文本对齐方式3.富文本显示 显示图片QLabel的交互功能可点击标签 QLabel的高级特性1.缩放图片以适应标签大…...

网站不备案百度收录吗/百度网站域名注册

作为一名互联网从业者、世界第一人称观察员,我对于这个行业最大的感触就是:不能停止学习。每时每刻都在世界某个角落里上演着技术变革和更新,默无声息,或者来势汹汹。 印象最为深刻的是,在毕业生校园招聘的过程中&…...

做网站的公司经营范围怎么写/宁波seo优化外包公司

问题描述 使用apt-get install tree root:# apt-get install tree 正在读取软件包列表... 完成 正在分析软件包的依赖关系树 正在读取状态信息... 完成 下列【新】软件包将被安装:tree 升级了 0 个软件包,新安装了 1 个软件包&#xff0…...

邮箱类网站模板/中文域名注册官网

无限极分类说简单点就是一个类可以分成一个分子类,然后一个子类又可以分另一个子类这样无限分下去,就是好象windows可以新建一个文件夹,然后在这个文件夹里又可以建一个文件夹,PHP要实现无限极分类有两种常用的做法,递归和引用算法…...

做网站用什么软件免费/seo项目

系统资源监控工具系统资源监控工具top命令top的输出详解htop命令一、安装htop命令二、操作htop的交互式页面glances命令一、安装glances命令二、操作glances命令三、glances的web服务功能四、glances的cs模式系统资源监控工具 Linux中,有很多系统监控工具可以用来监…...

wordpress 翻译方案/做网站推广的公司

话说,前几天,一个美国小哥发现了iPhone计算器的一个隐藏功能…本文摘编自微信公众号“英国那些事儿(hereinuk)”,不代表瞭望智库观点原来我们按错一个数字,可能就是按清除键全部清除…然而,他发…...

百度糯米网站怎么做/电商怎么做新手入门

文章目录简介推荐参数1. 前置条件1.1 点到字符串的转换压缩未压缩混合形式1.2 密钥派生函数6. 加解密加密流程解密流程实现参考资料简介 国密SM2算法并不仅仅是提供了新的曲线参数,而是在算法上对ECC进行了修改。 SM2的曲线使用了Weierstrass模型: y2x…...