JDBC獲取資料庫自動生成的屬性

2021-08-30 03:48:46 字數 1714 閱讀 5621

很多情況下,乙個關係某些屬性的值是在插入新的元組時自動生成的,最常見的情況可能是對元組進行自動編號,這樣的屬性也常常用作該關係的主鍵。如下面這個關係的user_id屬性的值就是由資料庫自動生成,並且是從1開始遞增:

drop table if exists `ripm`.`users`;

create table `ripm`.`users` (

`user_id` bigint(20) unsigned not null auto_increment,

`user_email` varchar(100) not null,

`user_password` varchar(64) not null,

`user_nicename` varchar(45) not null default '',

`user_url` varchar(100) not null default '',

`user_registered` datetime not nul,

`user_status` int(11) not null default '0',

`user_activation_key` varchar(45) not null default '',

primary key (`user_id`),

key `user_nicename` (`user_nicename`)

) engine=innodb auto_increment=13 default charset=utf8;

假設這個關係的其它屬性值不要求是唯一的話,當插入一條新的元組後想獲得該元組的user_id,最好的方法就是在插入資料之後,自動返回 user_id的值,而不是通過重新建立乙個查詢。況且在這樣的情況下,重新建立乙個查詢也很難獲得該元組的資料,因為除了user_id之外沒有可以唯 一識別該元組的。

在jdbc中,要獲得自動生成的鍵值可以使用statement的execute(string sql, int autogeneratedkeys)方法,例如:

connection conn = //獲得連線...;

statement st = conn.createstatement();

st.execute(sql, statement.return_generated_keys);

resultset rs = st.getgeneratedkeys();

if (rs.next())

如果乙個關係中有多個屬性的值是自動生成的,而且又不明確有多少個,或者插入的不僅僅是一條資料的話,或許可以考慮使用以下方式,即通過獲得結果集的元據來操作:

connection conn = //獲得連線...;

statement st = conn.createstatement();

st.execute(sql, statement.return_generated_keys);

resultset rs = st.getgeneratedkeys();

resultsetmetadata rsmd = rs.getmetadata();

int cols = rsmd.getcolumncount();

while (rs.next())

}

本文**

此方法我已經在實際專案中使用,資料庫使用的sql server2005,jdbc驅動使用的jtds的驅動。

jdbc獲取自動生成的主鍵

在我們設定設計表時,會設定主鍵,自動增長的主鍵 有時候我們插入資料時,要想知道我們生成的主鍵是多少 就比如這個需求場景 現在註冊賬號的前面是挺簡單的,但是後面要填很多資訊,使用者註冊時,新增使用者名稱,密碼後 就插入到資料庫當中 然後就跳轉成完善個人資訊頁 完善資訊更新到剛插入的那個記錄當中,所以要...

JDBC獲取資料庫所有表

當初在jdbc還沒研究透的時候,就偷懶去用了hibernate,現在回過頭來做jdbc的開發,發現自己真的了解的太少了,慚愧慚愧。public static list getalltablename connection cnn throws sqlexception resultset tabs ...

JDBC初步 獲取資料庫連線

方式一 顯示出第三方資料庫的api test public void testconnection1 throws sqlexception 方式二 體現面向介面程式設計的思想 test public void testconnection2 throws sqlexception 方式三 使用dr...