【JDBC】向數據表插入數據時,自動獲取生成的主鍵


  1. 數據表設計時,一般都會有一個主鍵(Key)(自己指定),有時也可以使用聯合主鍵;
  2. 有許多數據庫提供了隱藏列為表中的每行記錄分配一個唯一鍵值(如:rowid);
  3. 當我們沒有指定哪一列作為主鍵key時,數據表可能會含有一個隱含的主鍵(或者叫唯一鍵值);
當我們向數據表中插入數據時,對於每一條記錄,都會有一個主鍵與之對應,那么我們如何在向數據表中插入數據時,獲取到數據庫自動分配的主鍵呢?

如下給出示例:

11.png

上面使用到了PreparedStatement來執行SQL插入,關於 PreparedStatement與Statement的用法與區別,可以參考文章:
這里不多介紹;
只需要大體知道一些:
  1. PreparedStatement可以寫參數化查詢,比Statement能獲得更好的性能;
  2. 對於PreparedStatement來說,數據庫可以使用已經編譯過及定義好的執行計划,這種預處理語句查詢比普通的查詢運行速度更快。
  3. PreparedStatement可以防止SQL注入式攻擊;
  4. PreparedStatement可以寫動態查詢語句;
  5. PreparedStatement與java.sql.Connection對象是關聯的,一旦你關閉了connection,PreparedStatement也沒法使用了。
  6. PreparedStatement查詢默認返回FORWARD_ONLY的ResultSet,你只能往一個方向移動結果集的游標。當然你還可以設定為其他類型的值如:”CONCUR_READ_ONLY”。
  7. 占位符的索引位置從1開始而不是0,如果填入0會導致*java.sql.SQLException invalid column index*異常。所以如果PreparedStatement有兩個占位符,那么第一個參數的索引時1,第二個參數的索引是2.

KeyHolder是一個接口,下面是它的代碼:

22.png
Generated KeyHolder是 KeyHolder接口的默認實現類,他的函數作用如下:
33.png
當執行insert語句時,會自動將數據庫自動產生的key值保存在 Generated KeyHolder對象對象中,如下是jdbcTemplete.update()的源碼:

44.png











附件列表

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM