spring jdbcTemplate insert插入Oracle数据库后返回当前主键id

最近做一个spring版本3.0.4的老项目功能,应用场景要用到jdbctemplate插入oracle表后返回主键ID拿来和其他表关联。

用oralce的可以一直用这种处理方式,高兼容低。

public long insertOraGetId(final QuetInvtHeadVO headVO) {
		KeyHolder keyHolder = new GeneratedKeyHolder();
		jdbcTemplate.update(new PreparedStatementCreator() {
		    public PreparedStatement createPreparedStatement(Connection conn) throws SQLException {
		    	String sql = "insert into table values (seq_quet_invt_id.nextval,?,?,?,?,?,?,?,?,?)";
		        PreparedStatement ps = conn.prepareStatement(sql,new String[] {"id"});
	               ps.setString(1, headVO.getHeadType());  

	               return ps;
		      	}
		     },keyHolder);
		   return keyHolder.getKey().longValue();
	}

new string[] {"id"} 就是返回插入数据后序列增长后的主键,我已经应用到老项目中,处理稳定。

时间: 2024-10-07 21:16:34

spring jdbcTemplate insert插入Oracle数据库后返回当前主键id的相关文章

mybatis+mysql insert添加数据后返回数据主键id

1.根据useGeneratedKeys获取返回值,部分数据库不支持 修改mybatis xml <insert id="insertUser" useGeneratedKeys="true" keyProperty="id" parameterType="com.entity.user"> insert into test (name) values (#{name}) </insert> useGe

数据库插入数据返回当前主键ID值方法

环境:SQL Anywhere 9.0.2 创建语句: create table test(    id int primary key identity(1,1),    name varchar(20)) 当我们插入一条数据的时候,我们很多时候都想立刻获取当前插入的主键值返回以做它用.我们通常的做法有如下几种: 1. 先 select max(id) +1 ,然后将+1后的值作为主键插入数据库: 2. 使用特定数据库的 auto_increment 特性,在插入数据完成后,使用 select

Mybatis 在 insert 之后想获取自增的主键 id,但是总是返回1

记录一次傻逼的问题, 自己把自己蠢哭:Mybatis 在 insert 之后想获取自增的主键 id,但是总是返回1 错误说明: 返回的1是影响的行数,并不是自增的主键id: 想要获取自增主键id,需要通过xx.getId()方法获取,因为在mybatis中指定自增主键id封装到了对象的属性中,所以我们需要在对象中来获取 代码示例如下: <insert id="add" useGeneratedKeys="true" keyColumn="id&quo

Mycat探索之旅(4)----Mycat的自增长主键和返回生成主键ID的实现

说明:MyCAT自增长主键和返回生成主键ID的实现 1) mysql本身对非自增长主键,使用last_insert_id()是不会返回结果的,只会返回0:这里做一个简单的测试 创建测试表 -------------------------------------- --创建测试表 ------------------------------------- USE test; CREATE TABLE IF NOT EXISTS t_auto_increment ( id INT NOT NULL

mybatis自动生成后无法获取主键id问题

使用mybatis的自动生成工具生成的主键id: <selectKey resultType="java.lang.Integer" keyProperty="id" order="AFTER" > SELECT LAST_INSERT_ID()</selectKey> 使用sharding-jdbc时候 一直提示 分片报错, 可以使用这种方式解决: <insert id="insertSelective&

oracle数据库创建表且主键自增

Oracle数据库中,设置ID自增并不像MySQL中那么简单,Oracle中需要设置一个序列. 现在给出方式,具体如下: 第一步:建立一个表 create table ContestDB ( TID NUMBER(10) PRIMARY KEY, TEAMNUM varchar(50) not null, MARKNUM varchar(50) ); 第二步:设置ID自增 第一种方式:不使用触发器 1 CREATE SEQUENCE SEQ_TID; 2 INSERT INTO ContestD

SqlServer中插入数据后如何得到主键ID

使用@@IDENTITY 例如:insert into student(name,age) values('fanqi',23) select @@identity 使用 OUTPUT inserted 例如:INSERT INTO UserInfo(Username,LogName,[Password],resTime) OUTPUT inserted.UserID VALUES ('12345','56789','112233',GETDATE()) 原文地址:https://www.cnb

Oracle数据库作业-2 添加主键 外键

一.在表student中添加主键sno 二.在表course中添加主键cno和外键tno 三.在表teacher中添加主键tno 四.在表score中添加外键sno和cno

Mybaties保存后自动获取主键ID

<!-- 插入记录 --> <insert id="saveTvTypeBatch" useGeneratedKeys="true" keyProperty="id" parameterType="java.util.List"> <selectKey resultType="long" keyProperty="id" order="AFTER&