對(duì)于任何數(shù)據(jù)庫(kù)來(lái)說(shuō),提供唯一標(biāo)識(shí)數(shù)據(jù)表中一行記錄的能力是至關(guān)重要的。幾乎所有數(shù)據(jù)庫(kù)都提供了為新添加的行自動(dòng)生成主鍵的方法。這樣再操作數(shù)據(jù)庫(kù)的時(shí)候比較方便,但它也帶來(lái)了一個(gè)問(wèn)題,如果我們需要知道新生成的主鍵值該怎么辦?
有的數(shù)據(jù)庫(kù)供應(yīng)商是預(yù)先生成(pre-generate)主鍵的(如Oracle和PostgreSQL),有的則是事后生成(post-generate)的(如SQL Server和MySQL)。不管是哪種方式,我們都可以使用<selectKey>節(jié)點(diǎn)來(lái)獲取<insert>語(yǔ)句所產(chǎn)生的主鍵。下面的例子演示了這兩種方式下的做法:
<!-- Oracle SEQUENCE Example using .NET 1.1 System.Data.OracleClient -->
<insert id="insertProduct-ORACLE" parameterClass="product">
<selectKey resultClass="int" type="pre" property="Id" >
SELECT STOCKIDSEQUENCE.NEXTVAL AS VALUE FROM DUAL
</selectKey>
insert into PRODUCT (PRD_ID,PRD_DESCRIPTION) values (#id#,#description#)
</insert>
<!-- Microsoft SQL Server IDENTITY Column Example -->
<insert id="insertProduct-MSSQL" parameterClass="product">
insert into PRODUCT (PRD_DESCRIPTION)
values (#description#)
<selectKey resultClass="int" type="post" property="id" >
select @@IDENTITY as value
</selectKey>
</insert>
<!-- MySQL Example -->
<insert id="insertProduct-MYSQL" parameterClass="product">
insert into PRODUCT (PRD_DESCRIPTION)
values (#description#)
<selectKey resultClass="int" type="post" property="id" >
select LAST_INSERT_ID() as value
</selectKey>
</insert>
posted on 2008-08-01 14:44
josson 閱讀(477)
評(píng)論(0) 編輯 收藏 所屬分類:
java 開(kāi)發(fā)