当我们插入一条数据的时候,我们很多时候都想立刻获取当前插入的主键值返回以做它用。我们通常的做法有如下几种:
1. 先 select max(id) +1 ,然后将+1后的值作为主键插入数据库;
2. 使用特定数据库的 auto_increment 特性,在插入数据完成后,使用 select max(id) 获取主键值;
3. 对于Oracle,使用 sequence 获取值。
对于以上3种方法都无法绝对保证在高并发情况下的操作的原子性。
现记录以下几种获取数据库主键值方法:
1. 数据库原生支持的sql方法:
SQLServer:
Sql代码
- INSERT INTO table_name (.....) VALUES(......) SELECT @@IDENTITY AS aliasname;
上面的语句相当于查询语句,从结果集中使用 getXXX(aliasname) 方法获取主键值。
Oracle:
Sql代码
- INSERT INTO table_name(......) VALUES(......) RETURNING[primaryKey INTO]:aliasname;
也是相当于查询语句,从结果集中使用 getXXX(aliasname) 方法获取主键值。
2. java.sql.Statement 返回键获取:
a: 使用JDBC 3.0提供的 getGeneratedKeys (推荐使用)
Java代码
- 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
Java代码
- 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);
-
- }
分享到:
相关推荐
Sqlserver大数据量插入速度慢或丢失数据的解决方法 Sqlserver大数据量插入速度慢或丢失数据的解决方法
mysql oracle sqlserver db2 sbase
表结构的创建比较简单,但是表的数据量太大,一时也想不到怎么把sqlserver表数据复制到oracle中,于是请教公司主管,用存储过程实现可以查询出所有数据的insert脚本,在oracle库中创建好表,直接把sqlserver中的...
多数据库之间交换数据 破解版 支持 access mysql oracle sqlserver db2 的相互交换
一、创建序列 1.1、直接在PLSQL中设置 1.2、命令创建 create sequence seq_users ##创建序列seq_users increment by 1 ## 步长,每次加1 start with 1 ##从1开始 minvalue 1 ##最小值 maxvalue 9999999 ##最大值 ...
比较SQL Server、Oracle和DB2
Oracle同步数据到Sql Server,只是初始加载过程,由于本人也是在学习阶段,本资料主要是用于备份,慎入!
解决oracle sqldeveloper无法连接mysql、SQLServer问题,sqlDeveloper是ORACLE数据库开发工具,自带的是无法连接MS SQL Server以及mysql的,想连接的话需要第三方工具。 使用方法: 解压出来后将2个jar放入jlib...
详细介绍了从SQL Server迁移大批量数据到Oracle的方法和具体的操作步骤。
db2,mysql,berby,oracle,postgresql,sqlserver,sybase数据库驱动jar包
利用 Microsoft SQL Server Migration Assistant for Oracle.exe(微软数据库迁移工具) ,将oracle数据库迁移数据到SQL server详解。
Oracle数据库导入到SqlServer步骤(图文篇),自己写的,碰到不少问题,终于解决了。
Oracle中如何用一条SQL快速生成10万条测试数据
sqlserver自动生成sql语句工具sqlserver转oracle
Oracle和SqlServer的语法区别
连接数据库使用的jar包,oracle,sqlserver,db2驱动包亲测可用
sqlserver数据表向oracle转换,输入的参数是表名,输出的是建表语句
Oracle与SQLServer的SQL语法差异,用简单易懂的语言和实例对Oracle和Sql Server语法之间的差异进行了对比分析,更加适用于入门的人
oracle SQL 语句插入数据 方便 简洁
通过ORACLE通用连接访问SQLServer数据库的方法