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_KEYSstatement.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 ...
随机推荐
- 【C/C++】Dijkstra算法的简洁实现
Dijkstra的实现有很多种,下面给出一种较为简洁和高效的实现,可以作为模板快速使用. 1. 使用邻接表存储图: 2. 使用标准STL的vector存储每个点的所有邻接边: 3. 使用pair记录当 ...
- linux中的&&,|| 与 () 命令
用&&连接两个命令,前一命令执成功(返回0)下一命令才会执行, 如 date && echo 1 会打印1,而data && echo 2不会打印2 & ...
- CSS3选择器p:nth-child和p:nth-of-type之间的差异
稍微自己理解了一下,感觉就是:nth-of-type似乎有种族歧视,界限划分很清晰.在同一个国家(父级)中的时候,nth-of-type指认自己人排名,nth-child全都算在内排名,阿T的要求真的 ...
- mongoDB 文档操作_增
增加 / 插入 /保存 单文档插入 命令 db.collection.insertOne(doc) 功能 向被 use 的数据库中插入数据 实例 db.class.insertOne({"n ...
- 彻底理解cookie,session,token
发展史 1.很久很久以前,Web 基本上就是文档的浏览而已, 既然是浏览,作为服务器, 不需要记录谁在某一段时间里都浏览了什么文档,每次请求都是一个新的HTTP协议, 就是请求加响应, 尤其是我不用 ...
- PMP备考资料和备考经验分享(基于PMP第六版)
之前有不少小伙伴私信我说,你PMP考过了,有没有报班呢,有没有自己看的资料,有没有一些经验分享,今天在这里,就统一给大家分享一下,以便大家备考和学习PMP. 先说我自己的情况,我本身是从事项目管理的, ...
- 自动化运维工具Ansible介绍
一个由 Python 编写的强大的配置管理解决方案.尽管市面上已经有很多可供选择的配置管理解决方案,但他们各有优劣,而 ansible 的特点就在于它的简洁. 让 ansible 在主流的配置管理系统 ...
- 2018年秋季学期《c语言程序设计》学习总结
<c语言程序设计>第四周学习总结 <c语言程序设计>第五周学习总结 <c语言程序设计>第六周学习总结 <c语言程序设计>第七周学习总结 <c语言程 ...
- KNN算法的实现
K近邻(KNN)算法简介 KNN是通过测量不同特征值之间的距离进行分类.它的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别,其 ...
- Python项目读取配置的几种方式
1. 将配置写在Python文件中 配置文件(config.py 或 settings.py) 通常放置在程序源代码的目录,方便引用 配置文件 # settings.py class Config(o ...