如何取得新增記錄的自動編號字段的值
數據庫 MS-SQL server 2000
表 Infos 有一自動編號字段 sid
我用如下方法向表中新增一條記錄
stmt = con.createStatement();
stmt.executeUpdate(sql);
有沒有辦法取得該新增記錄的自動編號字段sid的值?
ASP有這樣的做法
rs.open "select * from Infos where sid is null",conn,3,3
rs.addnew
rs("AA") = AA
..
rs.update
''然后取得該記錄的sid的值
SID = rs("sid")
請教java里有沒有類似的方法?不要告訴我用取最大的值的方法。
如果短時有多個新增記錄,用取最大值的方法可能不準確。
請各位大俠幫忙看看,百分感謝~~!
我的做法是,首先找到這個自增字段的名字,比如SEQ_AUTH_CERT_ID;
如果要得到最新更新的id就首先
String sql1="select SEQ_AUTH_CERT_ID.nextval from dual";
去得到這個最新的id!然后再insert!
要分兩部走的~~
update 之后是不能直接獲得IDENTITY列的值的。
你必須在select才能獲得。
當然還有方法是一步可以實現的,先打開ResultSet
設定游標類型是可修改的。
此時你就可以獲得列的值,也可以對記錄進行修改。
不同的數據庫有不同的方法.SQLServer可以執行insert語句后從系統變量@IDENTITY中取得主鍵值,Oracle可以從序列中取得就是樓上的Sequence.nextval后再插入到表中。
INSERT INTO jobs (job_desc,min_lvl,max_lvl)
VALUES ('Accountant',12,125)
SELECT @@IDENTITY AS 'Identity',@@IDENTITY、SCOPE_IDENTITY 和 IDENT_CURRENT 函數類似。
@@IDENTITY 和 SCOPE_IDENTITY 將返回在當前會話的所有表中生成的最后一個標識值。但是,SCOPE_IDENTITY 只在當前作用域內返回值,而 @@IDENTITY 不限于特定的作用域。
IDENT_CURRENT 不受作用域和會話的限制,而受限于指定的表。IDENT_CURRENT 返回任何會話和任何作用域中為特定表生成的標識值。
你可以看一下SQLServer的聯機幫助中的相關章節
用insert 語句添加后,再select * from infos order by sid desc 再在結果集把第一條記錄拿出來(第一條就是新增記錄的sid)
需要session
posted on 2005-11-08 08:31 bluesky 閱讀(1914) 評論(0) 編輯 收藏 所屬分類: 關系數據庫