【问题标题】:getting the id of the inserted row [duplicate]获取插入行的ID [重复]
【发布时间】: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.. 检查答案

标签: java jdbc


【解决方案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 对象而创建的任何自动生成的键。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-07-07
        • 2015-10-17
        • 1970-01-01
        • 1970-01-01
        • 2012-01-23
        • 1970-01-01
        相关资源
        最近更新 更多