`
piziwang
  • 浏览: 240060 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

数据库插入数据返回当前主键ID值方法随记

阅读更多

当我们插入一条数据的时候,我们很多时候都想立刻获取当前插入的主键值返回以做它用。我们通常的做法有如下几种:

 

1. 先 select max(id) +1 ,然后将+1后的值作为主键插入数据库;

2. 使用特定数据库的 auto_increment 特性,在插入数据完成后,使用 select max(id) 获取主键值;

3. 对于Oracle,使用 sequence 获取值。

 

对于以上3种方法都无法绝对保证在高并发情况下的操作的原子性。

 

现记录以下几种获取数据库主键值方法:

 

1. 数据库原生支持的sql方法:

 

   SQLServer:

 

INSERT INTO table_name (.....) VALUES(......)  SELECT @@IDENTITY AS aliasname;

   上面的语句相当于查询语句,从结果集中使用 getXXX(aliasname) 方法获取主键值。

 

   Oracle:

 

INSERT INTO table_name(......) VALUES(......) RETURNING[primaryKey INTO]:aliasname;

   也是相当于查询语句,从结果集中使用 getXXX(aliasname) 方法获取主键值。

 

 

2. java.sql.Statement 返回键获取:

 

    a: 使用JDBC 3.0提供的 getGeneratedKeys (推荐使用)

 

Statement stmt = ... ;

stmt.executeUpdate("INSERT INTO table_name(......) VALUES(......)", Statement.RETURN_GENERATED_KEYS);

ResultSet rs = stmt.getGeneratedKeys();

int keyValue = -1;

if (rs.next()) {

    keyValue = rs.getInt(1);

}

 

   b:使用特定数据库特有的SQL

 

Statement stmt = ... ;

stmt.executeUpdate("INSERT INTO table_name(......) VALUES(......)", Statement.RETURN_GENERATED_KEYS);

ResultSet rs = stmt.executeQuery("SELECT LAST_INSERT_ID()");

int keyValue = -1;

if (rs.next()) {

    keyValue = rs.getInt(1);

}

 

 

 

 

 

分享到:
评论

相关推荐

    一些有关哈希函数的随记

    这篇随记将探讨哈希函数的基本概念、性质以及在实际应用中的重要性。 哈希函数,也称为散列函数,是一种特殊的算法,它将任意长度的输入(也称为预映射或消息)转化为固定长度的输出,这个输出通常被称为哈希值或...

    初学VB.NET使用心得随记

    `GetChanges`方法返回自上次调用`AcceptChanges`或`RejectChanges`以来的已更改记录。如果`GetChanges`返回非空`DataTable`,则表示有未保存的更改,通过`adapter1.Update`将这些更改写回到数据库。 在数据绑定部分...

    SAP HANA数据库直连工具

    ngdbc.jar包含必要的类和方法,允许开发者通过编写Java代码来建立和管理到HANA数据库的连接。 标签中提到的"jar"、"数据库"和"java database"进一步强调了Java在连接SAP HANA数据库中的作用。`.jar` 文件是Java ...

    数据分级存储及访问方式设计方案研究随记.docx

    数据分级存储及访问方式设计方案是一种优化存储资源利用率和提升系统性能的方法。在互联网行业中,面对海量的数据增长,如何有效地管理和存储这些数据成为了一个关键问题。本文将围绕数据分级存储的定义、必要性、...

    EHCache的使用随记

    4. **缓存元素(Cache Entry)**:缓存中的数据单元,由键(Key)和值(Value)组成,还有可能包含过期策略和其它元数据。 5. **缓存策略**:包括缓存加载策略(如懒加载)、更新策略(如写时复制、写后更新等)、...

    随记app,微博与博客整合

    随记App是一款集成微博与博客功能的毕业设计项目,旨在为用户提供一个统一的平台来管理和分享他们的日常思考和生活点滴。这个项目分为客户端和服务端两部分,分别实现了用户交互界面和后台数据处理。 在Android...

    微信小程序小手随记个人记账软件系统

    微信小程序“小手随记”个人记账软件系统是一个基于.NET框架和SQL Server数据库的完整解决方案,旨在提供用户友好的移动记账体验。这个系统包括三个主要组成部分:前台小程序源代码、后台接口源代码和后台管理源代码...

    JSP PDF打印 随记 复杂模板设计

    我们需要从数据库或其他数据源获取信息,然后将这些数据插入到PDF模板的相应位置。这可以通过Java的EL(Expression Language)或JSTL(JavaServer Pages Standard Tag Library)实现。 4. **页面设置**:根据需求,...

    随记小时光设计书1

    在"随记小时光设计书1"中,我们主要讨论的是用户信息和手账信息的设计,特别是在数据库方面的应用。这个设计涉及到用户信息的多个关键组成部分,包括昵称、用户名、密码、邮箱、手机号以及权限和加密key的管理。下面...

    Java.util随记.doc

    此外,`List`接口提供了搜索、插入和移除元素的高效方法,比如`indexOf()`和`lastIndexOf()`用于查找元素的位置,`subList()`用于创建列表的子列表,以及`add(int index, E element)`和`removeRange(int fromIndex, ...

    网络原理随记.pdf

    计算机网络原理随记 在本资源中,我们将讨论计算机网络的基本概念、发展历程、网络架构、协议栈、数据传输、网络互通、安全性等方面的知识点。 计算机网络的基本概念 计算机网络是指将多个计算机设备连接起来,以...

    随记:flex发送XML到servlet

    标题“随记:flex发送XML到servlet”指的是在Flex应用程序中向Java Servlet发送XML数据的过程,这通常涉及到客户端与服务器端的交互。Flex是一种基于Adobe AIR或Flash Player运行时的开发框架,常用于创建富互联网...

    c#随记.docx

    变量分为值类型和引用类型,值类型如int、char直接存储值,引用类型如class、interface、delegate、数组和string则存储对象的引用。 数据类型中,浮点型如decimal、float和double需要使用特定后缀来指定,例如...

    随记_电气_

    【标题】:“随记_电气_”提示我们这是一份关于电气工程领域的个人笔记或学习心得,可能包含了一些作者在学习或实践中积累的电气知识。 【描述】:“电气相关的知识,随手写的,不知道行不行11111”表明这份文档...

    c++随记.docx

    ### C++ 随记知识点总结 #### 一、内存管理与 new/delete 操作符 在 C++ 中,`new` 和 `delete` 是用于动态内存分配的关键字。`new` 用于在堆区分配内存,`delete` 用于释放之前通过 `new` 分配的内存。使用 `new`...

    互联网公司实习日记随记参考.pdf

    互联网公司实习日记随记参考.pdf互联网公司实习日记随记参考.pdf互联网公司实习日记随记参考.pdf互联网公司实习日记随记参考.pdf互联网公司实习日记随记参考.pdf互联网公司实习日记随记参考.pdf

    linux net 管理随记

    linux net 管理随记,留着个人备忘

    git随记 git

    git随记 git

    面试随记???随时更新

    面试随记???随时更新

Global site tag (gtag.js) - Google Analytics