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 ...
随机推荐
- ABP项目概述
在系统性介绍整个ABP框架之前,我们首先需要对ABP框架有一个大概的了解,ABP框架的全称是:Asp.Net Boilerplate Project(即Asp.Net 的样板项目)顾名思义就是能够通过 ...
- DAY15、模块
一.函数的补充 1.函数回调: 提前在另一个函数中写出函数的调用,再根据实际的需求去考虑函数体的实现 def download(fn=None): print('开始下载') my_sleep(1) ...
- vhdl when else
在VHDL中,IF...THEN...ELSE是顺序语句,只能出现在行为描述中(进程体或者子程序中):而WHEN...ELSE是并行语句,可以直接出现在结构体中,但却不能出现在行为描述中.WHEN.. ...
- Python3 与 C# 并发编程之~ 协程篇
3.协程篇¶ 去年微信公众号就陆陆续续发布了,我一直以为博客也汇总同步了,这几天有朋友说一直没找到,遂发现,的确是漏了,所以补上一篇 在线预览:https://github.lesschina.c ...
- CF757E Bash Plays with Functions
题解 q<=1e6,询问非常多.而n,r也很大,必须要预处理所有的答案,询问的时候,能比较快速地查询. 离线也是没有什么意义的,因为必须递推. 先翻译$f_0(n)$ $f_0(n)=\sum_ ...
- input输入框自动获取焦点
只要在该input标签后添加autofocus="autofocus"即可 代码实例: <html> <head></head> <bod ...
- 金融量化分析【day112】:量化平台的使用-初始化函数
一.set_benchmark - 设置基准 1.实现代码 # 导入函数库 import jqdata #初始化函数,设定基准等等 def initialize(context): set_bench ...
- 金融量化分析【day113】:布林带策略
一.布林带策略简介 1.简介 2.计算公式 3.图形 二.布林带策略代码 import jqdata def initialize(context): set_benchmark('0000 ...
- 浏览器UI多线程及JavaScript单线程运行机制的理解
在上一篇博客中,我对jQuery的队列(queue)机制和动画(animate)机制做了一个深入的解析,在animate的实现机制其核心是依靠queue来完成的,其中在jQuery的链式调用部分,之前 ...
- An Apple a day keeps the doctor away
An apple a day keeps the doctor away. 一天一苹果,不用请医生. 活学活用:apple as like as an apple to an oyster 毫无相同之 ...