JDBC中新增数据获取主键的方法

本文介绍了如何在JDBC中通过executeUpdate方法插入数据并获取自动生成的主键。使用Statement.RETURN_GENERATED_KEYS参数来指示需要返回主键,之后可通过getGeneratedKeys方法获取结果集并读取主键值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JDBC中新增数据获取主键的方法

Statement接口有一个方法:int executeUpdate(String sql, int autoGeneratedKeys) throwsSQLException。执行给定的 SQL 语句,并用给定标志通知驱动程序由此 Statement 生成的自动生成键是否可用于获取。如果该 SQL 语句不是 INSERT 语句,或者不是可以返回自动生成键的 SQL 语句(这些语句的列表是特定于供应商的),则驱动程序将忽略该标志。autoGeneratedKeys - 指示自动生成的键是否可用于获取的标志;以下常量之一:Statement.RETURN_GENERATED_KEYS

Statement.NO_GENERATED_KEYS

使用statement实现类对象调用executeUpdate方法,传入的第二个参数(常量字段值)表示是否需要获取自动生成的主键,如果传入的是Statement.RETURN_GENERATED_KEYS(表示1,即也可以传入1),表示需要返回主键。如果不需要返回,可以传入Statement.NO_GENERATED_KEYS(表示0,也可以传0),不需要返回主键时,我们也可以直接用单参的executeUpdate方法。一般我们都传入常量值字段,便于我们在阅读代码时直到该参数的含义,如果直接传入0或1,在阅读代码时可能不知道其含义。

执行完execute语句之后,在使用Statement的getGenerateKeys()获取结果集。

ResultSetgetGeneratedKeys() throws SQLException:获取由于执行此 Statement 对象而创建的所有自动生成的键。如果此 Statement 对象没有生成任何键,则返回空的 ResultSet 对象。

获得的结果集就是主键的结果集,就一列内容,可以通过next方法遍历得到set。getString(1)获取主键值。

代码示例:

createStatement的方法执行语句:

Statementps = c.createStatement();

intflag = ps.executeUpdate("insert into student(sname,birthday,class)values('xiaohua','2003-05-05','vr')",Statement.RETURN_GENERATED_KEYS);

       //获取主键  ResultSet getGeneratedKeys()

       ResultSet set = ps.getGeneratedKeys();//返回主键结果集

       while(set.next()){//遍历结果集(只有一列)

           System.out.println(set.getInt(1));//得到第一列的值

       }

prepareStatement的方法执行语句:

PreparedStatementps = null;

ps =c.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);

ResultSetset1 = ps.getGeneratedKeys();

while(set1.next()){

           System.out.println(set1.getString(1));

           }

Types类:

publicclass Typesextends Object:定义用于标识一般 SQL 类型(称为 JDBC 类型)的常量的类。

常量字段值:

### 实现 MyBatis 插入操作后返回自增主键 ID 为了使 MyBatis 在执行插入语句之后能够获取并返回数据库生成的自增主键,可以在 `<insert>` 标签内设置 `useGeneratedKeys` 属性为 true 并指定 `keyProperty` 来映射实体类字段与数据库列之间的关系。 #### XML 配置示例 ```xml <insert id="insertLawsB" parameterType="com.test.entity.main.LawsB" useGeneratedKeys="true" keyProperty="id"> <!-- 警告 - @mbggenerated 此元素由 MyBatis Generator 自动生成,请勿修改 --> insert into LAWS_B ( TYPE, NAME, PDATE ) values ( #{type,jdbcType=NVARCHAR}, #{name,jdbcType=NVARCHAR}, #{pdate,jdbcType=NVARCHAR} ) </insert> ``` 这段配置说明了如何定义一个名为 `insertLawsB` 的 SQL 映射语句[^1]。其中: - **parameterType**: 定义传入参数的数据类型; - **useGeneratedKeys=true**: 明此条目将利用 JDBC 获取自动产生的键值; - **keyProperty=id**: 将新生成的主键赋给 Java 对象对应的属性名; 对于 MySQL 数据库而言,在同一个连接上下文中可以通过调用 `LAST_INSERT_ID()` 函数来取得最近一次成功执行 INSERT 命令所创建的第一行记录的第一个 AUTO_INCREMENT 列的值[^2]。 需要注意的是,当使用 MyBatis 执行插入操作时,默认情况下返回的结果是受影响的行数而非具体的主键值。如果希望得到刚插入记录的主键,则需按照上述方式进行适当调整以确保主键能被正确填充回原始对象实例中去[^3]。 此外,还有一种情况是在某些场景下可能会遇到即使设置了正确的配置也无法正常工作的情况,这可能是由于缓存或其他因素引起的异常行为。此时建议开启调试模式查看具体流程以便更好地定位问题所在[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

QYHuiiQ

听说打赏的人工资翻倍~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值