對于任何數據庫來說,提供唯一標識數據表中一行記錄的能力是至關重要的。幾乎所有數據庫都提供了為新添加的行自動生成主鍵的方法。這樣再操作數據庫的時候比較方便,但它也帶來了一個問題,如果我們需要知道新生成的主鍵值該怎么辦?
有的數據庫供應商是預先生成(pre-generate)主鍵的(如Oracle和PostgreSQL),有的則是事后生成(post-generate)的(如SQL Server和MySQL)。不管是哪種方式,我們都可以使用<selectKey>節點來獲取<insert>語句所產生的主鍵。下面的例子演示了這兩種方式下的做法:
<!-- 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 閱讀(475)
評論(0) 編輯 收藏 所屬分類:
java 開發