如何重新得到ID (自动增长的主键),

rationalMath 2003-09-28 10:49:58
我插入一条记录到数据库中后,想知道我到底插了哪条数据?需要重新获得ID。
如何做。

1.如果重新用Select max(ID )
在这个过程之前正好对象也插了一条记录,
问题就出现了。
2.用刚才插入的其他值查询
问题是其他值不一定唯一。

事实上 我是在考虑 如何做DAO对象的新建方法。
...全文
53 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunthing 2003-09-29
  • 打赏
  • 举报
回复
将表锁定!或设定事务级别,
这样的话都要牺牲系统的性能!
建义:将表锁定!
yuqf2000 2003-09-28
  • 打赏
  • 举报
回复
可以这样解决,建立一个表来存储这个主键序列,建一个类从这个表中取得主键,
这个类在处理过程中,先update,使主键值加1,再select max(),这样处理就不会有重了,主键管理类中不要使用事务,凡是使用该 方法,主键就加1
tianya2002 2003-09-28
  • 打赏
  • 举报
回复
我是这么做的,
先算一个统计编号,如TXC0000001 然后把他做为数据ID写入数据库中

然后在在把000000001+1写入一个计录表中。下次在调这个计录表的数据,就行了,,,

代码

public String getCount(){
try {
this.rs=executeQuery("select * from OA0011 where Type='公文起草'");
while (rs.next()){
count =(rs.getInt("COUNT"))+1 ;
}
} catch(Exception e) {
e.printStackTrace();
}
return Integer.toString(count);
}
lynx1111 2003-09-28
  • 打赏
  • 举报
回复
sql server 2000 标准做法:

declare @intEqId int
insert into test(bb,cc)values('dssf','sert')
select @intEqid=@@identity
realby 2003-09-28
  • 打赏
  • 举报
回复
我觉得咱们说的是一个问题吧,不是?~~我能无错运行~
hj12 2003-09-28
  • 打赏
  • 举报
回复
把你新存的对象存起来,下次用的时候去出来,就可以了。不同的对象在调用AddNewObject时候把你可以新建一个对象,这个对象和你的原来的对象基本相同,你在加上一个用来标识调用这个对象的属性,每次在你插入的时候就建立一个 这样的对象,并把他们放在集合里,在插入前你要先检查是否有同一个有相同的类生成的对象如过有,覆盖掉这个类,没有就新建,想拿出来的话,就可以上哪个集合里去取。
realby 2003-09-28
  • 打赏
  • 举报
回复
担心多余了~~按理你说得对~~~~但是不用管~~数据库里会做的~~为什么都有自增功能~~数据库里都考虑了~绝对不会有你说的那个情况~~~
rationalMath 2003-09-28
  • 打赏
  • 举报
回复
如果,在一个对象实例调用AddNewObject 和 GetNewsSn 之间,
存在别的实例或过程,
如:本对象的不同实例,也调用了AddNewObject 这时候就有问题了。
AddNewObject负责新建对象和插入一条记录。

感谢回复。
realby 2003-09-28
  • 打赏
  • 举报
回复
"在这个过程之前正好对象也插了一条记录" 不冲突不重复阿?
public String getNewSn() {
String sql = "select max(project_sn) from project_info";
return String.valueOf(executeQueryInt(sql)+1);
}

public boolean addProject() {
project_sn = getNewSn();
....
...
gks_cn 2003-09-28
  • 打赏
  • 举报
回复
各个数据库不同

81,095

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧