JDBC獲得數據庫生成的主鍵 佟強 http://blog.csdn.net/microtong 在實際開發中,數據庫中表的主鍵經常會由數據庫負責生成,INSERT語句插入數據時插入除了主鍵以外的字段。很多情況下,當INSERT語句提交給數據庫引擎執行完成后,程序需要獲得生成的主鍵以便根
JDBC獲得數據庫生成的主鍵 佟強 http://blog.csdn.net/microtong
在實際開發中,數據庫中表的主鍵經常會由數據庫負責生成,INSERT語句插入數據時插入除了主鍵以外的字段。很多情況下,當INSERT語句提交給數據庫引擎執行完成后,程序需要獲得生成的主鍵以便根據主鍵查詢插入的記錄。JDBC通過在調用語句對象的executeUpdate()方法時,給出第二個參數Statement.RETURN_GENERATED_KEYS
來說明希望數據庫引擎返回生成的主鍵。生成的主鍵以結果集的形式返回,程序調用語句對象的getGeneratedKeys()
方法得到一個結果集。遍歷這個結果集,即得到數據庫生成的主鍵。
我們以MySQL5.0數據庫為例,創建會員表“member”,其中字段ID是數據負責生成的自動增量的整數。下列SQL語句創建會員表:
/* 創建MySQL5.0 表member*/
create table member(
id int not null auto_increment
, /*數據庫自動生成的主鍵*/
name varchar(100), /*會員姓名*/
email varchar(255), /*電子郵件*/
primary key (id)
)type = InnoDB default character set gbk;
package cn.oakcms;
import java.sql.*;
public class GeneratedKey {
public static void main(String[] args) {
Connection conn = null; //連接對象
Statement stmt = null; //語句對象
ResultSet rs = null; //結果集
try{
//加載MySQL驅動程序
Class.forName("com.mysql.jdbc.Driver");
//連接字符串
String url = "jdbc:mysql://127.0.0.1:3306/mydb?useUnicode=true&characterEncoding=gbk";
//建立數據庫連接
conn = DriverManager.getConnection(url,"root","");
//創建語句對象
stmt = conn.createStatement();
//INSERT語句
String sql = "insert into member(name,email) values('張三','zhangsan@gmail.com')
";
//執行INSERT語句,說明要返回數據庫生成的主鍵
int count = stmt.executeUpdate(sql, Statement.RETURN_GENERATED_KEYS);
System.out.println("成功插入"+count+"條記錄!");
//產生的主鍵以結果集的形式返回
rs = stmt.getGeneratedKeys();
//遍歷結果集,輸出主鍵,實際上結果集只有一條記錄
while(rs.next()){
long id = rs.getLong(1);
System.out.println("產生的主鍵是:"+id);
}
//關閉結果集、語句、連接
rs.close(); stmt.close(); conn.close();
}catch(Exception e){
e.printStackTrace();
}finally{
if(rs!=null) try{rs.close();}catch(Exception ignore){}
if(stmt!=null) try{stmt.close();}catch(Exception ignore){}
if(conn!=null) try{conn.close();}catch(Exception ignore){}
}
}
}
程序的運行結果如下,每次運行都將插入一條新的記錄,生成一個新的ID。
成功插入1條記錄!
產生的主鍵是:6
OakCMS內容管理系統 http://www.oakcms.cn
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com