`
wb284551926
  • 浏览: 552954 次
文章分类
社区版块
存档分类
最新评论

利用JDBC获取新插入记录id主键的三种方法(转载)

 
阅读更多
在一对多的关联操作中,通常在一方插入记录后,需要获取到当前记录的id,以方便进行多方的插入操作。要解决这一问题,在JDBC中至少有三种不同的实现方法:
1.在插入语句后添加一条查询,利用resultset来得到id号
psmt = con.prepareStatement
            ("insert into orders (receiver,address,telephone,total,detailnum,userid)values(?,?,?,?,?,?);select

@@identity");
            psmt.setString(1, order.getReceiver());
            ……
            results = psmt.executeQuery();
            if(results.next())
            {
                num = results.getInt(1);
            }
2.利用generatedKey来获取id
psmt = con.prepareStatement
            ("insert into orders (receiver,address,telephone,total,detailnum,userid)values

(?,?,?,?,?,?)",Statement.RETURN_GENERATED_KEYS);
            psmt.setString(1, order.getReceiver());
            ……
            psmt.executeUpdate();
            results = psmt.getGeneratedKeys();
            int num = -1;
            if(results.next())
            {
                num = results.getInt(1);
            }

3.调用存储过程来实现,当然这种情况下,插入对象的属性不宜过多,否则存储过程的输入参数太多。在存储过程中,将id作为输出参数返回
CallableStatement proc = conn.prepareCall("{call proc_insert(?,?,?)}");
            proc.setString(1, cardname);
            proc.setInt(2, money);
            proc.registerOutParameter(3, Types.INTEGER);
            proc.execute();
            num = proc.getInt(3)

开始用第一种方法,什么set nocount on都用到了,就是不能解决问题,最后用第二种方法成功解决。

PS:
SQL Server 2000中,有三个比较类似的功能:他们分别是:SCOPE_IDENTITY、IDENT_CURRENT 和 @@IDENTITY,它们都返回插入到 IDENTITY 列中的值。
 IDENT_CURRENT 返回为任何会话和任何作用域中的特定表最后生成的标识值。IDENT_CURRENT 不受作用域和会话的限制,而受限于指定的表。IDENT_CURRENT 返回为任何会话和作用域中的特定表所生成的值。
     @@IDENTITY 返回为当前会话的所有作用域中的任何表最后生成的标识值。
     SCOPE_IDENTITY 返回为当前会话和当前作用域中的任何表最后生成的标识值SCOPE_IDENTITY 和 @@IDENTITY 返回在当前会话中的任何表内所生成的最后一个标识值。但是,SCOPE_IDENTITY 只返回插入到当前作用域中的值;@@IDENTITY 不受限于特定的作用域。
 
貌似SCOPE_IDENTITY 比 @@IDENTITY更加安全。
原文地址:http://blog.sina.com.cn/s/blog_4b5bc01101019vc3.html
分享到:
评论

相关推荐

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

    总的来说,Java中的JDBC提供了一种灵活且强大的方式来处理数据库操作,包括插入记录并获取自增主键。正确地使用预编译的`PreparedStatement`可以提高代码的可读性和安全性,同时,通过设置`RETURN_GENERATED_KEYS`...

    java使用jdbc插入信息时获取id1

    标题"java使用jdbc插入信息时获取id1"指的是在Java程序中,通过JDBC执行SQL插入语句后,如何获取数据库自动生成的唯一标识符(通常是主键ID)。描述中的"设置成可以获取主键"是关键步骤,这可以通过调用`...

    mysql的插入问题 怎么获得自动增长的ID

    #### 三、通过Java程序使用JDBC获取刚插入记录的ID 当通过Java程序使用JDBC接口插入记录时,通常需要知道刚插入的记录的ID。这可以通过以下两种方式实现: 1. **使用`getGeneratedKeys()`方法**: - 在执行插入...

    jdbc保存对象返回一个主键

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

    mybatis获取自增ID

    - 最后通过`systemBean.getId()`方法获取了插入后自动生成的ID。 #### 五、总结 通过上述两种方式,我们可以有效地在MyBatis中获取自增长的ID,这对于业务逻辑的实现非常重要。第一种方式更加简洁,适合于简单的...

    支持主键自增的数据库获取主键值.zip

    但这种方式并不适用于所有数据库,因此MyBatis提供了更通用的解决方案,即通过JDBC的`Statement.getGeneratedKeys()`方法来获取自增主键。 总的来说,当使用MyBatis操作支持主键自增的数据库时,正确配置映射文件并...

    mysql取得自动增长的主键值

    - **标准方法:** 使用`INSERT`语句插入数据后,可以通过`LAST_INSERT_ID()`函数或`getGeneratedKeys()`方法来获取刚插入记录的自增ID。 - **示例代码:** 下面的Java示例展示了如何使用JDBC API来插入一条记录并...

    获取自增ID.docx

    本文详细介绍了在Java环境中如何获取自增ID的三种主要方法:XML配置方法、JDBC方法以及Hibernate方法。每种方法都有其适用场景,开发者可以根据项目的具体需求选择最适合的方案。无论是通过框架还是直接使用JDBC API...

    spring boot整合mybatis利用Mysql实现主键UUID的方法

    由于使用了UUID作为主键,插入数据时MyBatis会自动为新记录生成一个UUID。例如: ```java import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.Select; public interface ...

    MyBatis获取插入记录的自增长字段值(ID)

    MyBatis获取插入记录的自增长字段值(ID)详解 在MyBatis中,获取插入记录的自增长字段值是一个常见的问题,特别是在使用自动增长字段的数据库管理系统中。下面,我们将详细介绍MyBatis获取插入记录的自增长字段值的...

    Mybatis使用useGeneratedKeys获取自增主键的方法

    这个特性在处理像MySQL、SQL Server等支持自动增长字段的数据库时特别有用,可以避免进行额外的查询来获取新插入记录的主键。本文将深入探讨`useGeneratedKeys`的工作原理以及它在批量插入和`ON DUPLICATE KEY ...

    用JDBC编写新闻页面

    在MySQL部分,项目可能涉及到了数据库的设计,包括创建新闻表,定义字段如ID(主键)、标题、内容、发布日期等。SQL语句如`CREATE TABLE`、`INSERT INTO`、`SELECT`、`UPDATE`和`DELETE`等都会在项目中得到应用。 ...

    Struts2 JDBC 增删改查

    项目中主键是通过sequence来自增的,这意味着数据库(如Oracle、PostgreSQL等支持序列的数据库)会自动为新记录生成唯一ID。在JDBC中,通常需要调用序列的nextval()函数来获取这个ID,然后插入到对应字段。 此外,...

    学生管理系统jdbc

    例如,可以创建一个名为`students`的表,包含`id`(主键)、`name`、`age`、`gender`和`major`等字段。创建表的SQL语句可能如下: ```sql CREATE TABLE students ( id INT AUTO_INCREMENT PRIMARY KEY, name ...

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

    Hi-Lo算法是一种在应用层面生成主键的方法,主要用于减少对数据库的访问。它通过一个较大的基数(Hi)和一个较小的局部范围(Lo)来生成主键,每次只向数据库请求新的基数,从而提高性能。 理解并掌握这些主键生成...

    jdbc—Java开发数据库连接

    利用JDBC,开发者可以在Java代码中编写数据库操作的语句,实现对数据库的连接、查询、更新和管理等功能。JDBC为Java开发中的数据库连接提供了一套标准,使得开发者可以使用相同的代码,通过不同的数据库驱动来访问...

    java jdbc简单论坛设计

    - 使用PreparedStatement插入新帖子:`INSERT INTO posts (user_id, title, content, timestamp) VALUES (?, ?, ?, ?)`。 6. **查询与显示帖子** - 获取帖子列表,可能按时间、热度等排序。使用`SELECT * FROM ...

    jdbc项目.zip

    这需要用到JDBC的更新(UPDATE)和删除(DELETE)操作,根据用户提供的ID或其他标识来定位并修改或移除特定用户的数据。 5. **数据的增删改查(CRUD)**:CRUD是数据库操作的基本动作。在这个项目中,通过JDBC编写...

    MybatisPlus中插入数据后获取该对象主键值的实现

    在MybatisPlus中,插入数据并获取对象的主键值是一个常见的需求,特别是在需要跟踪新插入记录的唯一标识时。MybatisPlus提供了一种简便的方式来实现这一功能。本篇文章将详细解释如何在MybatisPlus中实现这一操作,...

    浅谈MyBatis-Plus学习之Oracle的主键Sequence设置的方法

    这样的设置确保了在插入新记录时,MyBatis-Plus能够正确地调用Sequence获取唯一主键,从而保证数据的完整性和一致性。理解并熟练掌握这一配置方法,对于在Oracle环境下使用MyBatis-Plus进行开发至关重要。

Global site tag (gtag.js) - Google Analytics