有些開發者喜歡使用資料庫自增字段作為表主鍵,即:主鍵值不在應用層產生,而是在新增記錄時由資料庫產生。這樣,應用層在儲存物件前並不知道物件主鍵值,而必須在儲存資料後才能從資料庫中返回主鍵值。在很多情況下,我們需要獲取新物件持久化後的主鍵值。在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位,不進占空間並且建索引的話效能會比...