useGeneratedKeys底层原理
时间: 2023-10-17 08:05:50 浏览: 35
在使用 JDBC 插入数据时,如果需要获取插入数据的自动生成主键,可以通过 `PreparedStatement` 的 `getGeneratedKeys()` 方法来获取,其中 `useGeneratedKeys` 参数可以设置为 `true`。
当 `useGeneratedKeys` 参数设置为 `true` 时,JDBC 会将插入语句发送给数据库,然后从数据库返回生成的主键,这个过程是在 JDBC 驱动中实现的。具体实现过程如下:
1. 对于支持自动生成主键的数据库,比如 MySQL,JDBC 驱动会在执行插入语句之前,将其改写成带有 `RETURN_GENERATED_KEYS` 标志的语句,如下所示:
```
INSERT INTO table_name (column1, column2, ...) VALUES (?, ?, ...);
```
改写后的语句如下:
```
INSERT INTO table_name (column1, column2, ...) VALUES (?, ?, ...), RETURN_GENERATED_KEYS;
```
在执行插入语句后,JDBC 驱动会从数据库返回生成的主键。
2. 对于不支持自动生成主键的数据库,比如 Oracle,JDBC 驱动会在执行插入语句之后,通过执行 `SELECT` 语句来获取主键。
```
INSERT INTO table_name (column1, column2, ...) VALUES (?, ?, ...);
SELECT last_insert_id(); -- Oracle 中为 SELECT SEQ_NAME.CURRVAL FROM DUAL;
```
执行 `SELECT` 语句后,JDBC 驱动会从数据库返回生成的主键。
总的来说,`useGeneratedKeys` 参数的底层原理是通过 JDBC 驱动来实现的,具体实现方式会因不同的数据库而有所不同。