论坛首页 入门技术论坛

jdbc 获得刚刚自动生成的主键

浏览 4108 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-02-02   最后修改:2010-02-03

上学的时候给一个公司做网站,碰到过一个小问题:如何获得刚刚插入记录的自动生成的主键。

比如我要生成一个订单,那么需要往两张表插入记录:“订单表”和“商品项目表”(“商品项目表”以“订单表”的主键作为外键)。

当时我的做法非常的笨拙,插入记录后,根据多个条件将该记录的主键查询出来,呵呵;

后来为了避免这个问题,我就先把这个主键得到然后再进行插入,反正都够笨的。

我当时学习jdbc的时候看的 JDBC Database Programming with J2EE 这本书,当时我觉得够全的了,上面都没讲如何获得新纪录的自动生成主键,网上也没搜到,我以为就没办法了,前段时间写jdbc课件看api文档时才发现有相关支持,特发表此文,给刚入门的同学提个醒。

 

我们需要用到下面两个方法:

 

Connection接口定义的方法

 

 PreparedStatement prepareStatement(String sql, int autoGeneratedKeys) 
 创建一个默认 PreparedStatement 对象,该对象能获取自动生成的键。

 

 Statement接口定义的方法

 

ResultSet getGeneratedKeys() 
获取由于执行此 Statement 对象而创建的所有自动生成的键。 

 

 

以下表为例:

 

 

 CREATE TABLE userinfo(
   id int IDENTITY(1,1) PRIMARY KEY NOT NULL,
   name varchar(50) NULL
 )

 

 

java代码实现:

String sql = "insert into userinfo values ('张三')";
PreparedStatement stmt = con.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
stmt.executeUpdate();
ResultSet rs = stmt.getGeneratedKeys();
int newid = 0;
if(rs.next()) newid = rs.getInt(1);

 

 

   发表时间:2010-04-08  
whistler 写道

上学的时候给一个公司做网站,碰到过一个小问题:如何获得刚刚插入记录的自动生成的主键。

比如我要生成一个订单,那么需要往两张表插入记录:“订单表”和“商品项目表”(“商品项目表”以“订单表”的主键作为外键)。

当时我的做法非常的笨拙,插入记录后,根据多个条件将该记录的主键查询出来,呵呵;

后来为了避免这个问题,我就先把这个主键得到然后再进行插入,反正都够笨的。

我当时学习jdbc的时候看的 JDBC Database Programming with J2EE 这本书,当时我觉得够全的了,上面都没讲如何获得新纪录的自动生成主键,网上也没搜到,我以为就没办法了,前段时间写jdbc课件看api文档时才发现有相关支持,特发表此文,给刚入门的同学提个醒。

 

我们需要用到下面两个方法:

 

Connection接口定义的方法

 

 PreparedStatement prepareStatement(String sql, int autoGeneratedKeys) 
 创建一个默认 PreparedStatement 对象,该对象能获取自动生成的键。

 

 Statement接口定义的方法

 

ResultSet getGeneratedKeys() 
获取由于执行此 Statement 对象而创建的所有自动生成的键。 

 

 

以下表为例:

 

 

 CREATE TABLE userinfo(
   id int IDENTITY(1,1) PRIMARY KEY NOT NULL,
   name varchar(50) NULL
 )

 

 

java代码实现:

String sql = "insert into userinfo values ('张三')";
PreparedStatement stmt = con.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
stmt.executeUpdate();
ResultSet rs = stmt.getGeneratedKeys();
int newid = 0;
if(rs.next()) newid = rs.getInt(1);

 

 

 

0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics