获取插入行的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:使用序列时,获取返回值
Mysql:mysql_insert_id()
SQL Server:@@IDENTITY
自定义方式:select max(id) from table
纯java(支持JDBC驱动):见Statement.getGeneratedKeys()
检索由于执行此 Statement 对象而创建的任何自动生成的键。
【讨论】:
以上是关于获取插入行的ID [重复]的主要内容,如果未能解决你的问题,请参考以下文章
获取 Apache Spark 中重复行的 ID(考虑所有其他列)