关于如何获得数据库插入操作中数据的自增长主键的值
2011-04-22 11:19
447 查看
有时在做数据插入操作时需要获得刚刚插入数据的主键值,由于主键是自增长,并且可能存在并发的情况,所以不能使用数据库最后一条记录来确定。
当然如果使用hibernate的话hibernate会主动帮你获得主键,但项目可能碰到这样的需求插入就使用hibernate来处理。从网上搜索了很多解决方案,并在查看了MYSQL的文档后找到了在MYSQL中的解决方案。
在MYSQL中可以使用select @@identity;来查询最后一条插入自增长的键值,select @@identity;查询的是当前作用域的自增长键值,也就是当前Connection的,所以在同一个Connection操作下可以在插入一条记录后在执行select @@identity;查询出该条记录的主键。在MSSQL中好像也可以这样查询,就是不知道查询出来的作用域是否是当前会话的作用域,如果是的话MSSQL也就能采用同样的方法实现了。
附上一个基本的查询代码:
当然如果使用hibernate的话hibernate会主动帮你获得主键,但项目可能碰到这样的需求插入就使用hibernate来处理。从网上搜索了很多解决方案,并在查看了MYSQL的文档后找到了在MYSQL中的解决方案。
在MYSQL中可以使用select @@identity;来查询最后一条插入自增长的键值,select @@identity;查询的是当前作用域的自增长键值,也就是当前Connection的,所以在同一个Connection操作下可以在插入一条记录后在执行select @@identity;查询出该条记录的主键。在MSSQL中好像也可以这样查询,就是不知道查询出来的作用域是否是当前会话的作用域,如果是的话MSSQL也就能采用同样的方法实现了。
附上一个基本的查询代码:
package com.ccesun.servicemix.local.error.dao; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class GenerateKeyCatchHelper { public static final String MYSQL_ID_SQL = "SELECT @@identity AS ID"; public static int doMYSQLInsert(Connection con, String insertSql, Object... params) throws SQLException{ int id = -1; if(con.isClosed()) return id; PreparedStatement ps = con.prepareStatement(insertSql); if(params!=null){ for (int i = 0; i < params.length; i++) { ps.setObject(i + 1, params[i]); } } ps.executeUpdate(); ResultSet rs = ps.executeQuery(MYSQL_ID_SQL); rs.next(); id = rs.getInt("ID"); return id; } }
相关文章推荐
- JDBC应用程序连接数据库–插入数据并且获得相应自增长值的列(即主键id)
- <转载>asp.net中向数据库中插入数据时如何获得当前插入行的主键?
- asp.net中向数据库中插入数据时如何获得当前插入行的主键?
- ibatis 插入数据主键依赖数据库自增长方式
- 关于如何将一个数据库中的表的数据插入另一个数据库中
- 如何准确高效的获取数据库新插入数据的主键id
- sqlite插入数据后如何获得插入数据的主键
- Web开发——如何使JDBC插入数据的时候返回自动增长的主键值
- C#如何操作Oracle并向数据库插入数据
- sybase数据库主键自增长时如何插入带主键的数据
- 如何使用myBatis在数据库中插入数据并返回主键
- 如何获取数据库新插入数据的主键id
- Mybatis插入操作 主键自增 返回成功 但是数据库没有数据
- 数据库操作_连接SQL Server数据库示例;连接ACCESS数据库;连接到 Oracle 数据库示例;SqlCommand 执行SQL命令示例;SqlDataReader 读取数据示例;使用DataAdapter填充数据到DataSet;使用DataTable存储数据库表;将数据库数据填充到 XML 文件;10 使用带输入参数的存储过程;11 使用带输入、输出参数的存储过程示;12 获得数据库中表的数目和名称;13 保存图片到SQL Server数据库示例;14 获得插入记录标识号;Exce
- MySQL数据表中有自增长主键时如何插入数据
- JDBC应用程序连接数据库--插入数据并且获得相应自增长值的列
- MyBatis插入数据后如何获得主键值
- 如果此处不对数据库进行关闭,将无法完成下一步的数据插入操作!
- 关于insert的语句从查询获得数据,并且从序列获得ID,该如何写?
- 微信公众号如何将用户数据插入数据库