`
whistler
  • 浏览: 25173 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

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

    博客分类:
  • java
阅读更多

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

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

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

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

我当时学习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);

 

 

分享到:
评论
1 楼 jc_dreaming 2010-04-08  
<div class="quote_title">whistler 写道</div>
<div class="quote_div">
<p>上学的时候给一个公司做网站,碰到过一个小问题:如何获得刚刚插入记录的自动生成的主键。</p>
<p>比如我要生成一个订单,那么需要往两张表插入记录:“订单表”和“商品项目表”(“商品项目表”以“订单表”的主键作为外键)。</p>
<p>当时我的做法非常的笨拙,插入记录后,根据多个条件将该记录的主键查询出来,呵呵;</p>
<p>后来为了避免这个问题,我就先把这个主键得到然后再进行插入,反正都够笨的。</p>
<p>我当时学习jdbc的时候看的 <span><strong><a style="font-size: 12px; color: #3366cc !important; line-height: 20px; text-decoration: none; font-family: Arial, Helvetica, sans-serif;" href="http://www.amazon.com/exec/obidos/tg/detail/-/0130453234/qid=1086060207/sr=1-1/ref=sr_1_1/102-3367218-4209708?v=glance&amp;s=books" target="_blank">JDBC Database Programming with J2EE</a> </strong>这本书,当时我觉得够全的了,上面都没讲如何获得新纪录的自动生成主键,网上也没搜到,我以为就没办法了,前段时间写jdbc课件看api文档时才发现有相关支持,<span style="line-height: normal; font-family: Verdana, Arial, Helvetica, sans-serif;">特发表此文,给刚<span style="color: #ff00ff;">入门的同学</span>提个醒。</span></span></p>
<p> </p>
<p>我们需要用到下面两个方法:</p>
<p> </p>
<p>Connection接口定义的方法</p>
<p> </p>
<pre name="code" class="java"> PreparedStatement prepareStatement(String sql, int autoGeneratedKeys)
创建一个默认 PreparedStatement 对象,该对象能获取自动生成的键。</pre>
<p> </p>
<p> Statement接口定义的方法</p>
<p> </p>
<pre name="code" class="java">ResultSet getGeneratedKeys()
获取由于执行此 Statement 对象而创建的所有自动生成的键。 </pre>
<p> </p>
<p> </p>
<p>以下表为例:</p>
<p> </p>
<p> </p>
<pre name="code" class="sql"> CREATE TABLE userinfo(
   id int IDENTITY(1,1) PRIMARY KEY NOT NULL,
   name varchar(50) NULL
)</pre>
<p> </p>
<p> </p>
<p>java代码实现:</p>
<pre name="code" class="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);</pre>
<p> </p>
<p> </p>
</div>
<p> </p>

相关推荐

    jdbc 插入记录并返回自增主键值

    对于具有自增主键的表,MySQL会自动为新插入的记录生成主键值。为了获取这个值,我们需要在插入语句中使用`LAST_INSERT_ID()`函数,并在`Statement`对象上设置`RETURN_GENERATED_KEYS`属性: ```java try ...

    jdbc保存对象返回一个主键

    本文将重点讲解如何使用JDBC保存一个Java对象到数据库,并获取插入后自动生成的主键值。 #### 二、关键概念 1. **PreparedStatement**:预编译的SQL语句,它可以提高执行效率,并有助于防止SQL注入攻击。 2. **...

    08_ibatis教程_sql主键生成方式.rar

    在Ibatis中,只需在Mapper XML文件中的`&lt;insert&gt;`标签中设置`useGeneratedKeys="true"`和`keyProperty="id"`,就可以让数据库自动生成主键。 4. **雪花算法(Snowflake Algorithm)**: 在分布式环境下,为了保证...

    Mybatis自动代码生成工具

    接着,定义需要生成代码的表,可以指定表名、是否生成主键字段、是否去除表前缀等。此外,还可以设置生成的代码风格,如实体类的命名规则、字段注释的生成方式等。 然后,Generator会根据配置文件中的信息,读取...

    MySQL表自动生成Java实体类

    本主题主要讲解如何利用工具或自定义脚本将MySQL数据表自动生成对应的Java实体类,提高开发效率。 首先,我们需要理解Java实体类的基本概念。在Java世界中,实体类通常用于ORM(对象关系映射)框架,如Hibernate或...

    JPA环境搭建及JPA实例与JPA主键生成策略

    `GenerationType.IDENTITY`意味着主键值由数据库自动生成,比如在MySQL中,这通常对应于`AUTO_INCREMENT`。 **JPA主键生成策略** JPA提供了多种主键生成策略,以下是一些常见的策略: 1. **IDENTITY**:数据库...

    Hibernate3自动生成entity

    例如,可以通过@Entity注解标记实体类,@Id注解标识主键,@GeneratedValue注解自动生成主键,@ManyToOne或@OneToMany注解处理一对多或多对一的关系。 通过以上步骤,我们成功地在MyEclipse中利用Hibernate3自动生成...

    Hibernate自动生成持久化类和映射文件

    "Hibernate自动生成持久化类和映射文件"这个话题主要涉及如何利用myEclipse这款集成开发环境的反向工程功能,快速地根据数据库中的表结构生成对应的Hibernate配置文件、映射文件以及持久化类。下面将详细介绍这一...

    mybatis自动生成实例支持oracle和MySQL

    在"mybatis自动生成实例支持oracle和MySQL"的场景中,我们可以理解为该压缩包包含了一个能够帮助开发者自动生成针对Oracle和MySQL数据库的相关代码的工具或教程。 1. **MyBatis自动化工具**: MyBatis Generator ...

    Java自动生成Mysql数据库结构

    "Java自动生成Mysql数据库结构"这个主题,就是关于如何利用编程语言自动化处理数据库设计的一部分。这个功能可以帮助开发者快速地创建数据库文档,减少手动编写SQL脚本和设计模式的时间。 首先,我们要理解这个代码...

    java自动生成model和mapper的工具

    因此,"java自动生成model和mapper的工具"应运而生,旨在提高开发效率,减少重复劳动。 该工具的核心功能是解析数据库表结构,并自动生成对应的Java Model类和Mapper接口。在使用过程中,开发者首先需要配置数据库...

    mybatis代码自动生成器

    MyBatis代码自动生成器是一款高效实用的工具,旨在帮助开发者快速生成MyBatis相关的Java代码,包括DAO层、Service层、Mapper接口以及XML配置文件等。它极大地提高了开发效率,减少了手动编写重复代码的工作量,使...

    mybatis自动生成所需JAR包

    **MyBatis Generator** 是MyBatis框架的一部分,它是一个代码生成工具,可以自动生成Java实体类、Mapper接口和XML配置文件。通过配置XML文件,MBG可以根据数据库表的信息自动生产相应的Java源代码,这样我们就无需...

    mybatis自动生成代码依赖包.rar

    Mybatis Generator是一款强大的工具,它能够自动生成Mybatis的映射文件、实体类以及DAO接口,极大地提高了开发效率。在Java开发中,Mybatis Generator基于XML配置文件,通过解析数据库表结构,能够自动创建与数据库...

    使用Mybatis-Generator自动生成Dao、Model、Mapping相关文件(转)

    Mybatis-Generator是一款强大的自动化工具,它可以帮助Java开发者自动生成Mybatis的相关代码,包括DAO(Data Access Object)、Model以及Mapper XML映射文件。这极大地提高了开发效率,避免了手动编写这些重复性工作...

    mybatis3自动生成代码例子

    MyBatis Generator(MBG)是MyBatis框架的一个实用工具,它允许用户自动生成Java持久层代码,包括DAO、模型类以及Mapper XML文件。在本例子中,我们使用的是`mybatis-generator-core-1.3.2-sources.jar`,这是一个...

    mybatis-generator自动生成代码

    MyBatis Generator(MBG)是一款强大的自动化代码生成工具,它可以极大地提高开发效率,通过配置文件自动生成MyBatis框架所需的Mapper接口、Mapper XML文件、Entity实体类、Service接口及其实现类等代码。...

    代码自动生成_连接数据库生成entity(可自定义)_mysql

    在IT行业中,代码自动生成是一种提高开发效率的重要技术。标题中的“代码自动生成_连接数据库生成entity(可自定义)_mysql”指的是一个自动化工具或框架,它能够帮助开发者从数据库结构自动生成对应的实体(Entity)...

    hibernate自动生成数据库文件

    本文将深入探讨Hibernate如何自动生成数据库文件,以及相关知识点。 首先,Hibernate的核心概念是对象关系映射(ORM),它通过元数据(如XML配置文件或注解)将Java类与数据库表进行绑定。当需要自动生成数据库文件...

Global site tag (gtag.js) - Google Analytics