如何在dao中获取 插入一条记录的id

时间:2021-06-08 00:25:48
表a有个主键id

id通过序列来递增

CREATE SEQUENCE SafeResult_sequence 
INCREMENT BY 1  -- 每次加几个 
START WITH 1   -- 从1开始计数 
NOMAXVALUE    -- 不设置最大值 
NOCYCLE     -- 一直累加,不循环 
CACHE 10;

当我插入一条记录并返回它的id,sql该怎么写呢?

17 个解决方案

#1


好像很难,除非主键时自己实现的自增方法,每次取最大的记录号+1

#2


我也要问这个问题!

#3


友情帮你顶一哈..

#4


在DAO中把记录插入数据库前,ID应该是空的吧?

#5


通过序列获取ID后,把它作为参数传出来不就行了吗?

#6


该回复于2017-07-07 17:11:40被管理员删除

#7


用bookmark标记当前位置,重新查询之后返回这个bookmark再获取ID

#8


TO: jiangsheng(蒋晟.MSMVP2004Jan)
bookmark是什么?

#9


提个思路,很早以前这么做的,做法不规范,正在整理那时候的文档,郁闷死了:)
(1)数据库中增加一个主键表,保存所有表将要插入新记录的新主键值,该表的记录数是确定的
(2)对每个表编写基本DAO
(3)写一个专门的静态方法,通过PrimaryKeyDAO读写主键表,放在工具集合类中
(4)在每个DAO的insert方法中通过工具集合类的方法读取和更新主键表(或者任何其他合适的地方),当然可以返回这个PK
当时的目的是为了剥离数据库功能和生成复杂主键,代码写的相当“临时”,没有严格按照上面的思路和DAO规范写,拿出来会被笑死的,就不献丑了:)

#10


mssql中插入完成以后,立即用SELECT ISNULL(@@IDENTITY,-1) AS [identity]  其他数据库就不知道了, 好象在jdbc3中,可以直接通过返回的值取得resultset.getGeneratedKeys()

#11


bookmark是recordset的属性

#12


TO: jiangsheng(蒋晟.MSMVP2004Jan)
jdbc有这属性吗?

#13


up

#14


很简单,你插完记录在查一下序列就可以了。

#15


TO: bixuehui(bxh)

在jdbc中怎么查序列?

#16


up!

#17


比如序列名称是aaa:
select aaa.nextval id from dual

#1


好像很难,除非主键时自己实现的自增方法,每次取最大的记录号+1

#2


我也要问这个问题!

#3


友情帮你顶一哈..

#4


在DAO中把记录插入数据库前,ID应该是空的吧?

#5


通过序列获取ID后,把它作为参数传出来不就行了吗?

#6


该回复于2017-07-07 17:11:40被管理员删除

#7


用bookmark标记当前位置,重新查询之后返回这个bookmark再获取ID

#8


TO: jiangsheng(蒋晟.MSMVP2004Jan)
bookmark是什么?

#9


提个思路,很早以前这么做的,做法不规范,正在整理那时候的文档,郁闷死了:)
(1)数据库中增加一个主键表,保存所有表将要插入新记录的新主键值,该表的记录数是确定的
(2)对每个表编写基本DAO
(3)写一个专门的静态方法,通过PrimaryKeyDAO读写主键表,放在工具集合类中
(4)在每个DAO的insert方法中通过工具集合类的方法读取和更新主键表(或者任何其他合适的地方),当然可以返回这个PK
当时的目的是为了剥离数据库功能和生成复杂主键,代码写的相当“临时”,没有严格按照上面的思路和DAO规范写,拿出来会被笑死的,就不献丑了:)

#10


mssql中插入完成以后,立即用SELECT ISNULL(@@IDENTITY,-1) AS [identity]  其他数据库就不知道了, 好象在jdbc3中,可以直接通过返回的值取得resultset.getGeneratedKeys()

#11


bookmark是recordset的属性

#12


TO: jiangsheng(蒋晟.MSMVP2004Jan)
jdbc有这属性吗?

#13


up

#14


很简单,你插完记录在查一下序列就可以了。

#15


TO: bixuehui(bxh)

在jdbc中怎么查序列?

#16


up!

#17


比如序列名称是aaa:
select aaa.nextval id from dual