当前页面: 开发资料首页 → JSP 专题 → 在JSP中,怎样获得新插入记录的自动增长列的编号?
在JSP中,怎样获得新插入记录的自动增长列的编号?
摘要: 在JSP中,怎样获得新插入记录的自动增长列的编号?
在JSP中,在插入记录的同时怎样获得该记录的自动增长列的编号?
不要告诉我在插入后再查询啊,因为这关系并发访问数据库的问题。因为我想获得该记录编号,如果
查询的时候又有人插入了记录就不好办了。
好象没有有效的办法吧?
不过理论上可以考虑把插入数据做成存储过程,应该可以解决吧
忘记说了,数据库是SQL server2000.
我在项目中的原意是新增加一个帖子后,自动转到这个帖子。所以我就想获得增加的这个帖子的ID号。
或者说为了实现这个功能有没有什么其他的方法。
select count(*) as cnt from table 然后 cnt + 1 就是当前的记录号
回楼上的,我是想获得新插入的记录编号。如果用select查询之前,又有人插入了记录了,你怎么办?得考虑并发访问
把插入数据做成存储过程,设置1~n个输入参数,以及1个输出参数
输出参数就是ID
这样应该没有并发问题吧……
不用存储过程的话有没有什么办法?
应该没办法了吧……
触发器???
不知道有没有可行性,没想过…………
我想用锁表的方法不知道可以不可以?
具体为:
在插入记录和查询编号这两步操作的时候锁定表,不让别人对数据库进行删除和增加操作。
访问量不算大的话应该可以
最好的方法就是存储过程返回结果了。
忘记了似乎是
SELECT @@IDENTITY
返回当前Connection中最近一次生成的ID字段的值
Only for SQL Server
> select count(*) as cnt from table 然后 cnt + 1 就是当前的记录号
麻烦您再想想!
楼上的,你看懂我的意思了吗,按照你的想法你能保证查询出来的最大值一定就是你刚才新插入记录的ID吗?
也麻烦你再想想!
to:zwf88(峰)
你的说法是错误的,比如删除了中间某些记录,主键id的值可能不是连续的;你那个只是得到了当前数据库中的记录个数
哦,我自己都看错了。但那是shine333(enihs)的错误。
但是我说的还是最大值。我刚开始以为shine333(enihs)求的是最大值呢。就算是最大值
那也不能保证查询出来的最大值一定就是你刚才插入的那条记录的ID号。
OK,明白了吧?
顶顶
-----------------------------
http://www.5ai7.net/
在SQL中可以不做递增,做一个序列表,每次增加时可以先到序列表取ID,然后再做insert,你不就有你当前插入行的ID了么!
ding
如果你知道怎么样能对你插入的那条记录进行update,那你就能的到你想要的ID号,就这么简单的事.别告诉我你们除了ID以外其他信息还有可能会完全重复
statement提供一个函数,getGeneratedKeys();使用这个函数试试,前提是你的数据库jdbc驱动要支持。如果不支持的话,通过resultset也可以获得,不过麻烦点。
奇怪了,为什么把简单问题复杂化?
干嘛一定用那个id去定位帖子???
在SQL中可以不做递增,做一个序列表,每次增加时可以先到序列表取ID,然后再做insert,你不就有你当前插入行的ID了么!
-----------------------------------
这个方法是可以的。。哈哈,设计模式里可都讲到主键设置的策略呀。。
adachi() 的方法在我这个环境下可行。
不过,其他方法也可以,不过要为了这个目的再去建个表什么的,那个实在是太浪费。
其实在某些特定的环境下力求最简洁的方法。
恩 呵呵!
狂晕!!!
lz指责我干嘛,看不懂引用的记号阿!!!
回复人:lianhg(lianhg) ( ) 信誉:1002006-9-25 19:58:30得分:0
?
select count(*) as cnt from table 然后 cnt + 1 就是当前的记录号
回复人:shine333(enihs) ( ) 信誉:1252006-9-25 21:21:49得分:0
?
> select count(*) as cnt from table 然后 cnt + 1 就是当前的记录号
麻烦您再想想!