Generated Key 简介
- 一. 前言
- 现场报错
- 原因
- 解决
- 扩展
- 二. Generated Key简介:
- 作用
- 使用
一. 前言
现场报错
在客户现场遇到如下报错,现象是无法使用调度系统进行数据库的 insert 操作:
原因
数据库版本太老,而 insert 语句是使用的 MyBatisPlus 的方法,会自动在执行的sql后面加上自动生成的 generated key,而数据库的驱动版本太老,不支持 generated key,导致数据库无法识别输入的sql,爆出sql语法错误;
解决
在datasource信息中的url后面加上 &supportGeneratedKey=false !
即关闭对generated key 的支持!
扩展
可以打开 MyBatis-plus 的SQL开关,让最终输出到数据库的sql语句打印到日志中,便于定位报错 !
二. Generated Key简介:
作用
MyBatisPlus 支持可以在插入数据时自动为 主键字段(如自增长ID)生成唯一的值!即generated key !
使用
使用Generated Key,就可以在插入数据时省略主键,数据库会自动为其生成一个唯一的值。
即通过Generated Key,可以避免手动为主键字段生成唯一的值,也可以确保主键的唯一性,同时提高了数据插入的效率。
在JDBC中,可以通过Statement.RETURN_GENERATED_KEYS参数来获取插入数据后生成的主键值。
String sql = "INSERT INTO users(name, age) VALUES('Tom', 20)";
PreparedStatement statement = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
int affectedRows = statement.executeUpdate();
if (affectedRows > 0) {
ResultSet rs = statement.getGeneratedKeys();
if (rs.next()) {
int id = rs.getInt(1); // 获取自动生成的主键值
System.out.println("Inserted ID: " + id);
}
}
注意:不是所有的数据库都支持Generated Key功能,例如Oracle数据库。在使用之前,需要先确认数据库是否支持该功能。
参考:https://www.yzktw.com.cn/post/757527.html