站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2EE 专题超简单问题,有关自动生成id号返回问题

超简单问题,有关自动生成id号返回问题

摘要: 超简单问题,有关自动生成id号返回问题


主表插入然后插入子表,问题就来了,子表需要主表的id号,这个id号我怎么取得

如果主表的id是自增我怎么取出来?怎么能保证我取得的号码就是刚才我插入的呢?
如果主表是我用程序生成的,那么我如何生成一个唯一的id号,并且这个id号取得之后在没有插入数据库之前不会被其他程序所使用呢?




hsql
insert into table1(id,name) values(null,'abc');
insert into table2(pid,detail) values(identity(),'handsome');

mssql
insert into table1(id,name) values(null,'abc');
insert into table2(pid,detail) values(@@identity,'handsome');


你可以专门用一个表保存其它表中用到的ID.专门写一个类从这个表中获取.
例:

表:xt_talbe_id

字段: table_name //表名,用ID的表.
c_id //table_name中当前的ID,也就是你刚插进去的ID
next_id //table_name中要用到的下一个ID.

这只是个思路.现在我们就用这种方式做项目.
供LZ参考.



谢谢楼上二位

Netself() :你的这个表取得一个id号之后马上就要改写next_id吧,也就是说取出了就永远也不会被再用了,如果业务出现回滚那么那个取得的id就永远都不会被使用,这样才能保证其他线程后续取号的时候不会取得相同的id,你没有说清楚是不是要马上更改这个id,我想确认一下是不是就是我说的这个过程?


c_id 和next_id 在每次取完后都要更新.

让c_id=next_id
next_id=next_id+1;


dreamover(梦醒了〖http://hellfire.cn〗) :你说的方法是错误的,应该用SCOPE_IDENTITY()

用@@IDENTITY是有危险的,具体原因看下面两个连接:
http://blog.joycode.com/ghj/archive/2004/03/21/16745.aspx
http://brooks.cnblogs.com/archive/2006/04/24/383391.aspx

谢谢Netself() 的回答,结贴


↑返回目录
前一篇: 关于request和session传参数的问题
后一篇: 找不到好答案!!getServletContext()不是一个静态方法,为什么jsp中可以直接调用呢?