數(shù)據(jù)庫 MS-SQL server 2000
表 Infos 有一自動(dòng)編號(hào)字段 sid
我用如下方法向表中新增一條記錄
stmt = con.createStatement();
stmt.executeUpdate(sql);
有沒有辦法取得該新增記錄的自動(dòng)編號(hào)字段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")
請(qǐng)教java里有沒有類似的方法?不要告訴我用取最大的值的方法。
如果短時(shí)有多個(gè)新增記錄,用取最大值的方法可能不準(zhǔn)確。
請(qǐng)各位大俠幫忙看看,百分感謝~~!
我的做法是,首先找到這個(gè)自增字段的名字,比如SEQ_AUTH_CERT_ID;
如果要得到最新更新的id就首先
String sql1="select SEQ_AUTH_CERT_ID.nextval from dual";
去得到這個(gè)最新的id!然后再insert!
要分兩部走的~~
update 之后是不能直接獲得IDENTITY列的值的。
你必須在select才能獲得。
當(dāng)然還有方法是一步可以實(shí)現(xiàn)的,先打開ResultSet
設(shè)定游標(biāo)類型是可修改的。
此時(shí)你就可以獲得列的值,也可以對(duì)記錄進(jìn)行修改。
不同的數(shù)據(jù)庫有不同的方法.SQLServer可以執(zhí)行insert語句后從系統(tǒng)變量@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 函數(shù)類似。
@@IDENTITY 和 SCOPE_IDENTITY 將返回在當(dāng)前會(huì)話的所有表中生成的最后一個(gè)標(biāo)識(shí)值。但是,SCOPE_IDENTITY 只在當(dāng)前作用域內(nèi)返回值,而 @@IDENTITY 不限于特定的作用域。
IDENT_CURRENT 不受作用域和會(huì)話的限制,而受限于指定的表。IDENT_CURRENT 返回任何會(huì)話和任何作用域中為特定表生成的標(biāo)識(shí)值。
你可以看一下SQLServer的聯(lián)機(jī)幫助中的相關(guān)章節(jié)
用insert 語句添加后,再select * from infos order by sid desc 再在結(jié)果集把第一條記錄拿出來(第一條就是新增記錄的sid)
需要session