JDBC 返回主键
转载至:https://www.liyongzhen.com/
上一节课里我们学习通过PreparedStatement对象执行带参数的查询SQL和修改SQL。
这节课我们学习使用 PreparedStatement对象执行插入SQL,并且返回主键。
要返回主键,有一个前提,就是数据库表必须有主键自增。
下面的代码演示了执行插入SQL并返回主键的用法。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
String sql = "INSERT INTO products(`ProductName`,`SupplierID`,`CategoryID`,`Unit`,`Price`)VALUES(?,?,?,?,?);" ; PreparedStatement statement = connection.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS); //加入参数Statement.RETURN_GENERATED_KEYS statement.setString( 1 , "milk" ); //设置参数…… statement.setLong( 2 , 16 ); statement.setLong( 3 , 1 ); statement.setString( 4 , "500ml" ); statement.setBigDecimal( 5 , new BigDecimal( 5.6 )); int value = statement.executeUpdate(); System.out.println( "受影响的记录数 " +value); int id = 0 ; ResultSet rs = statement.getGeneratedKeys(); //得到生成的主键,主键放在ResultSet对象里 if (rs.next()){ //提取主键值 id = rs.getInt( 1 ); } System.out.println( "主键 " +id); |
关键技术:
- 在创建PreparedStatement对象时,指定一个常量Statement.RETURN_GENERATED_KEYS,表示有返回主键的能力。
- 执行SQL语句时,仍然调用executeUpdate()方法。另外要调用getGeneratedKeys()方法,返回ResultSet对象。 ResultSet对象是结果集,存储查询结果,主键就保存在这里。
- 第三步,从ResultSet对象里提取主键。
完整代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
import java.math.BigDecimal; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class Insert { public static void main(String[] args) { String url = "jdbc:mysql://127.0.0.1:3306/northwind"; String user = "northwind"; String password = "northwind"; try (Connection connection = DriverManager.getConnection(url, user, password)) { String sql = "INSERT INTO products(`ProductName`,`SupplierID`,`CategoryID`,`Unit`,`Price`)VALUES(?,?,?,?,?);"; PreparedStatement statement = connection.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS); statement.setString(1, "milk"); statement.setLong(2, 16); statement.setLong(3, 1); statement.setString(4, "500ml"); statement.setBigDecimal(5, new BigDecimal(5.6)); int value = statement.executeUpdate(); System.out.println("受影响的记录数 "+value); int id = 0; ResultSet rs = statement.getGeneratedKeys(); if(rs.next()){ id = rs.getInt(1); } System.out.println("主键 "+id); rs.close(); statement.close(); // 关闭statement,释资源 } catch (SQLException e) { e.printStackTrace(); } } } |
JDBC 返回主键的更多相关文章
- MyBatis返回主键,MyBatis Insert操作返回主键
MyBatis返回主键,MyBatis Insert操作返回主键 >>>>>>>>>>>>>>>>> ...
- MyBatis在Oracle中插入数据并返回主键的问题解决
引言: 在MyBatis中,希望在Oracle中插入数据之时,同一时候返回主键值,而非插入的条数... 环境:MyBatis 3.2 , Oracle. Spring 3.2 SQL Snipp ...
- [oracle] 如何使用myBatis在数据库中插入数据并返回主键
在MyBatis中,希望在Oracle中插入数据的同时返回主键值,而非插入的条数. ① oracle使用 selectKey. U_USER_INFO_SEQ 是在数据库中定义好的这张表关联的序列se ...
- mybatis 08: 返回主键值的insert操作 + 利用UUID获取字符串(了解)
返回主键值的insert操作 应用背景 图示说明 在上述业务背景下,涉及两张数据表的关联操作:用户表 + 用户积分表 传统操作:在对用户表执行完插入语句后,再次查询该用户的uid,将该uid作为外键, ...
- Java MyBatis 插入数据库返回主键
最近在搞一个电商系统中由于业务需求,需要在插入一条产品信息后返回产品Id,刚开始遇到一些坑,这里做下笔记,以防今后忘记. 类似下面这段代码一样获取插入后的主键 User user = new User ...
- mybatis批量插入返回主键问题
今天整合mybatis时候用到返回主键问题,批量插入总是返回不了主键还报错. 记录入下: pom版本: <mybatis.version>3.2.6</mybatis.version ...
- 开启事务时mybatis返回主键id
先说一下没有注解的 先给出实体类: public class City { private int city_id; private String city_name; public int getC ...
- MyBatis框架——mybatis插入数据返回主键(mysql、oracle)
向数据库中插入数据时,大多数情况都会使用自增列或者UUID做为主键.主键的值都是插入之前无法知道的,但很多情况下我们在插入数据后需要使用刚刚插入数据的主键,比如向两张关联表A.B中插入数据(A的主键是 ...
- MyBatis insert返回主键(sqlserver2008)
mybatis insert返回主键(sqlserver2008) MyBatisXML配置,下面两种方式都行 方式1: <insert id="insert" para ...
随机推荐
- CentOS 7 rpm -i 时 警告warning: /var/tmp/rpm-tmp.z7O820: Header V4 RSA/SHA512 Signature, key ID a14fe591: NOKEY 解决方法
这是由于yum安装了旧版本的GPG keys造成的,解决办法就是 运行下面命令即可 # rpm --import /etc/pki/rpm-gpg/RPM* 查询已安装的rpm源 # rpm -qa ...
- zabbix异常信息修改已确认,为未确认
问题知悉只能知悉一次知悉了之后就不能再次知悉了,但又不想再创建新的异常怎么办呢.....直接改数据库数据.首先找到acknowledges表这里边存放的全是已经知悉的异常然后找events表,even ...
- idea在Terminal中使用maven指令
如果无法直接使用mvn指令,那么这里需要配置你idea中的maven的环境变量, 先说maven在idea中的位置,在你idea安装目录下的\plugins\maven 接下来配置环境变量:在你的用户 ...
- Python——OS模块
OS模块 OS模块 #os模块就是对操作系统进行操作,使用该模块必须先导入模块: import os #getcwd() 获取当前工作目录(当前工作目录默认都是当前文件所在的文件夹) result = ...
- 第六十九天 dom与bom
1.节点 dom与bom属 // DOM:文档对象模型 =>提高给用户操作document obj的标准接口 // DOM:以document为根,树状展开所有子节点 节点分类 // 节点分类: ...
- 「HGOI#2019.4.19省选模拟赛」赛后总结
t1-Painting 这道题目比较简单,但是我比较弱就只是写了一个链表合并和区间DP. 别人的贪心吊打我的DP,嘤嘤嘤. #include <bits/stdc++.h> #define ...
- [NOI2005]维护数列——平衡树观止
本题题解并不详细,不推荐大家看这一篇. 可以看这篇 题目描述 请写一个程序,要求维护一个数列,支持以下 6 种操作:(请注意,格式栏 中的下划线‘ _ ’表示实际输入文件中的空格) 100%的数据中, ...
- CMDB资产管理系统开发【day26】:Django admin
想实现的是一个表里面的字段 选择性的出现在菜单栏 1.如何自定义菜单 自定义菜单前 在asset\admin.py里添加如下代码: class NewAssetApprovalZoneAdmin(ad ...
- Oracle使用PLSQL导入数据后中文乱码的解决方法
新建环境变量 名:NLS_LANG 值:SIMPLIFIE DCHINESE_CHINA.ZHS16GBK 保存后重启PLSQL Developer 重新导入. 如果还是乱码,将上面8的环境变量值改为 ...
- [再寄小读者之数学篇](2014-06-22 求导数 [中国科学技术大学2014年高等数学B考研试题])
设 $f(x)=x^2\ln(x+1)$, 求 $f^{(n)}(0)$. 解答: 利用 Leibniz 公式易知 $f'(0)=f''(0)=0$, $f^{(n)}(0)=(-1)^{n-3} n ...