返回資料庫的表自增主鍵值

2021-08-20 19:59:14 字數 1827 閱讀 5358

有些開發者喜歡使用資料庫自增字段作為表主鍵,即:主鍵值不在應用層產生,而是在新增記錄時由資料庫產生。這樣,應用層在儲存物件前並不知道物件主鍵值,而必須在儲存資料後才能從資料庫中返回主鍵值。在很多情況下,我們需要獲取新物件持久化後的主鍵值。在hibernate、jpa、等orm框架中,新物件在持久化之後,主鍵值會自動繫結到物件上,給程式帶來方便。

在jdbc3.0規範中,當新增記錄時,允許將資料庫自動產生的主鍵值繫結到statement或preparedstatement中。在使用statement時,可以通過以下方法繫結到主鍵值。

int executeupdate(string sql , int autogeneratedkeys)
也可以通過connection建立繫結自增主鍵值的prepared statement,如下:

preparedstatement preparestatement(string sql , int autogenaratedkeys)
當autogeneratedkeys引數設定為statement.return_generated_keys時,即可繫結資料庫產生的主鍵值;當設定為statement.return_generated_keys時,不繫結主鍵值。下面的**演示了statement繫結並獲取資料庫產生的主鍵值得過程:

statement stmt = conn.createstatement();

string sql = "insert into t_topic(topic_title,user_id) values('測試主題','123')";

//指定繫結表自增主鍵值

stmt.executeupdate(sql , statement.return_generated_keys);

resultset rs = stmt.getgeneratedkeys();

if(rs.next())

spring 利用者一技術,提供了乙個可以返回新增記錄對應主鍵值得方法。如下:

int update(preparedstatementcreator psc , keyholder generatedkeyholder);
spring為keyholder介面指代了乙個通用得實現類generatedkeyholder,該類返回新增記錄時得自增長主鍵值。假設希望在新增論壇版塊物件後,將主鍵值載入到物件中,則可以按如下所示:

package com.smart.pojo;

//論壇實體類

public class forum

public void setforumid(int forumid)

public string getforumname()

public void setforumname(string forumname)

public string getforumdesc()

public void setforumdesc(string forumdesc)

}

@repository

public class forumdao

public void addforumdao(final forum forum)

},keyholder);

forum.setforumid(keyholder.getkey().intvalue());//從主鍵持有者中獲取主鍵

}

這樣,在呼叫addforum(final forum forum)新增forum領域物件後,forum將擁有對應的主鍵,方便後繼的使用。

oracle資料庫主鍵自增並且返回主鍵值

一 建立序列 1.1 直接在plsql中設定 1.2 命令建立 create sequence seq users 建立序列seq users increment by 1 步長,每次加1 start with 1 從1開始 minvalue 1 最小值 maxvalue 9999999 最大值 c...

Oracle資料庫主鍵自增

在學習mysql時,我們很容易通過auto increment就能實現主鍵自增的功能,但是在oracle資料庫中,是沒有這個關鍵字的,所以也不能通過這樣來實現主鍵自增。下面我就為大家介紹兩種實現主鍵自增的方法。兩種方法的基礎都有乙個概念就是序列 sequence 的概念,一種是利用序列和顯式呼叫的方...

資料庫主鍵自增策略

資料庫主鍵自增策略 1.自增長主鍵策略 優點 簡單,不需要程式做特別處理 缺點 這種方法對以後如果專案移植到其他資料庫改動會比較大,而且如果多表合併,就會出現重複的主鍵 2.使用時間戳 隨機數 優點 時間簡單,與資料庫無關,移植性較好 缺點 長度太長,最少也得20位,不進占空間並且建索引的話效能會比...