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

72 mysql 的客户端和服务器交互 returnGeneratedKeys

前言

这里主要是针对如下 情况的讨论

比如我们 tz_zone 表有一个自增长的主键 id, 然后 客户端这边可以通过 PreparedStatement 相关的 api 来获取 服务端这边生成的自增长的 id 

我们这里  来看一下 这个流程, 整体的 客户端 和 服务器的交互上面来看

问题来自于 主题:JDBC 插入数据返回数据主键 

 

 

测试用例

测试用例如下, 一个简单的 insert 语句, 然后从 prepatedStatement 中获取 新增的记录生成的主键 

/*** Test21GetGeneratedKeys** @author Jerry.X.He* @version 1.0* @date 2023/10/9 17:01*/
public class Test21GetGeneratedKeys {// Test21GetGeneratedKeyspublic static void main(String[] args) throws Exception {String url = "jdbc:mysql://192.168.220.132:3306/test_02?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&autoReconnectForPools=true";String username = "root";String password = "root";JdbcTemplate jdbcTemplate = Test14GenExpertSql.getMysqlJdbcTemplate(url, username, password);Connection con = jdbcTemplate.getDataSource().getConnection();PreparedStatement ps = con.prepareStatement("INSERT INTO `tz_zone`(`field1`) VALUES ('2023-07-25 00:00:00');", Statement.RETURN_GENERATED_KEYS);int updated = ps.executeUpdate();ResultSet rs = ps.getGeneratedKeys();rs.next();Long generatedId = rs.getLong(1);int x = 0;}}

 

 

客户端这边获取 generatedKeys

客户端这边获取 到的自增长的 id 来自于 this.getLastInsertId

8e60f716566df8eb3d00a3486f360ef0.png

 

this.getLastInsertId 来自于 目标 “insert into“ 的执行, 这里是从目标语句的 响应结果中获取的 自增长的主键的值

e722d35d60eb8dfee82405f1dc018528.png

 

 

服务器这边的处理

服务器这边状态的 响应来自于这里, 在命令处理完成之后, 会 send_statement_stauts 的处理, 这里面会响应当前处理的信息, 比如 affectedRows, lastInsertId, serverInfo 等等 

c962dc342345263a51515798499abfa5.png

 

然后响应给服务器这边的信息如下 

服务器状态, 警告数量, 影响的行的数量, 自增长id, 额外的信息 

5e814443d357d956e8bb58d9177016c6.png

 

 

Statement.RETURN_GENERATED_KEYS 标记的处理 

这个就是 纯纯的客户端 这边的处理了, 如果没有 RETURN_GENERATED_KEYS 标记, 然后需要获取 响应信息, 则客户端这边直接 抛出异常

9dd5b88e0984bfba2540247778513127.png

 

 

 

 

 

http://www.lryc.cn/news/511054.html

相关文章:

  • 【连续学习之SSL算法】2018年论文Selfless sequential learning
  • 【蓝桥杯——物联网设计与开发】拓展模块5 - 光敏/热释电模块
  • 数字IC后端设计实现十大精华主题分享
  • 高质量配音如何影响游戏的受欢迎度
  • QWidget应用封装为qt插件,供其他qt应用调用
  • UE(虚幻)学习(四) 第一个C++类来控制小球移动来理解蓝图和脚本如何工作
  • 使用FreeNAS软件部署ISCSI的SAN架构存储(IP-SAN)练习题
  • Sql Sqserver 相关知识总结
  • 面试题整理17----K8s中request和limit资源限制是如何实现的
  • Spring Boot @Conditional注解
  • jpeg文件学习
  • c++基于过程
  • FOC软件 STM32CubeMX 使用
  • leetcode hot 100 全排列
  • 使用qrcode.vue生成当前网页的二维码(H5)
  • 0055. shell命令--useradd
  • blender中合并的模型,在threejs中显示多个mesh;blender多材质烘培成一个材质
  • vue 本地自测iframe通讯
  • C++:单例模式
  • SOME/IP 协议详解——信息格式
  • C# GDI+数码管数字控件
  • 在交叉编译中,常见的ELF(elf)到底是什么意思?
  • Unity开发AR之Vuforia-MultiTarget笔记
  • 深入解析 Oracle 的聚合函数 ROLLUP
  • Wend看源码-Java-集合学习(List)
  • 【软件】教务系统成绩提交工具使用步骤
  • IPsec协议,网络安全的秘密
  • 浅谈下Spring MVC的执行流程
  • khadas edge2安装ubuntu22.04与ubuntu20.04 docker镜像
  • GitLab 服务变更提醒:中国大陆、澳门和香港用户停止提供服务(GitLab 服务停止)