您的位置:首页 > 数据库

JDBC获得数据库生成的主键(JDBC、Primary Key)

2009-12-08 23:21 232 查看
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;

获得主键的代码 GeneratedKey.java

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: