获取插入行的ID [重复]

Posted

技术标签:

【中文标题】获取插入行的ID [重复]【英文标题】:getting the id of the inserted row [duplicate] 【发布时间】:2014-01-29 23:09:27 【问题描述】:

我正在通过普通的旧 JDBC 将记录插入到数据库表中(因为这是我正在处理的项目中的设置......尚未迁移到 Hibernate)。

这是我的表结构

employee (empid int indentity not null, empName);

当我尝试通过 JDBC 代码插入记录时

insert into employee(empName) values('something')

它工作并插入了一条记录。 但是我需要针对插入的行获取 id。我可以尝试执行单独的选择查询来获取插入的行,但如果 2 个员工姓名相同,则可能无法获得正确的插入记录 ID。

如何使用 JDBC 获取插入的记录 ID。我正在使用preparedStatment.executeUpdate,它根据记录是否插入返回 0 或 1。

【问题讨论】:

你用的是什么数据库? 数据库是 SQL Server.. 检查答案 【参考方案1】:

根据声明JavaDoc,您可以像这样使用“RETURN_GENERATED_KEYS”-

stmt.execute("insert into employee(empName) values('something')",
    Statement.RETURN_GENERATED_KEYS);
ResultSet rs = stmt.getGeneratedKeys();
if (rs.next()) 
  return rs.getLong(1); // for example.

【讨论】:

【参考方案2】:

您想阅读 JDBC 的 Statement#getGeneratedKeys() 的文档,您必须在插入后调用该文档。这假设您的数据库支持检索生成的密钥,但并非所有数据库都支持。

【讨论】:

【参考方案3】:

这取决于数据库:

Oracle & PostgreSQL:使用序列时,获取返回值

Mysqlmysql_insert_id()

SQL Server@@IDENTITY

自定义方式select max(id) from table

纯java(支持JDBC驱动):见Statement.getGeneratedKeys() 检索由于执行此 Statement 对象而创建的任何自动生成的键。

【讨论】:

以上是关于获取插入行的ID [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Oracle始终获取具有标识的插入行的ID [重复]

我想获取我刚刚插入的行的 ID。我可以知道怎么做吗[重复]

获取 Apache Spark 中重复行的 ID(考虑所有其他列)

SQLSERVER 插入数据问题 INSERT 多条重复数据

MySQL插入,如何从插入中获取增量ID [重复]

将数据插入MySQL后如何获取插入ID [重复]