建立网站费用表,中国最强十大国企,网页设计公司山东济南兴田德润电话,比较好的做淘客网站前言
这里主要是针对如下 情况的讨论
比如我们 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?useUnicodetruecharacterEncodingUTF-8autoReconnecttrueautoReconnectForPoolstrue;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 this.getLastInsertId 来自于 目标 “insert into“ 的执行, 这里是从目标语句的 响应结果中获取的 自增长的主键的值 服务器这边的处理
服务器这边状态的 响应来自于这里, 在命令处理完成之后, 会 send_statement_stauts 的处理, 这里面会响应当前处理的信息, 比如 affectedRows, lastInsertId, serverInfo 等等 然后响应给服务器这边的信息如下
服务器状态, 警告数量, 影响的行的数量, 自增长id, 额外的信息 Statement.RETURN_GENERATED_KEYS 标记的处理
这个就是 纯纯的客户端 这边的处理了, 如果没有 RETURN_GENERATED_KEYS 标记, 然后需要获取 响应信息, 则客户端这边直接 抛出异常 完