Spring JDBC - 最后插入的 id

Posted

技术标签:

【中文标题】Spring JDBC - 最后插入的 id【英文标题】:Spring JDBC - Last inserted id 【发布时间】:2011-08-07 21:05:41 【问题描述】:

我正在使用 Spring JDBC。是使用 Spring Framework 获取最后插入的 ID 的简单方法还是我需要使用一些 JDBC 技巧?

jdbcTemplate.update("insert into test (name) values(?)", params, types);
// last inserted id ...

我在下面找到了类似的东西,但我得到了:org.postgresql.util.PSQLException: Returning autogenerated keys is not supported.

KeyHolder keyHolder = new GeneratedKeyHolder();
jdbcTemplate.update(new PreparedStatementCreator() 

    @Override
    public PreparedStatement createPreparedStatement(
            Connection connection) throws SQLException 
        PreparedStatement ps = connection.prepareStatement("insert into test (name) values(?)", new String[] "id");
        ps.setString(1, "test");
        return ps;
    

, keyHolder);
lastId = (Long) keyHolder.getKey();

【问题讨论】:

【参考方案1】:

旧的/标准的方法是在插入 (ref) 之后使用调用 currval()。简单又安全。

【讨论】:

谢谢。我是这样做的:jdbcTemplate.queryForLong("select currval('main_seq')");【参考方案2】:

仅从 PostgreSql Ver 8.4-701 开始支持“为 PreparedStatements 生成密钥”。

【讨论】:

以上是关于Spring JDBC - 最后插入的 id的主要内容,如果未能解决你的问题,请参考以下文章

Spring JDBC - 针对多个表的批量插入

Spring JDBC 与 JDBC

如何使用带有 Spring JDBC 的 MERGE 语句插入/更新单个记录

使用 Spring JDBC 将数据插入外部表

spring jdbc 批处理插入主健重复的数据

如何在 Spring Data JDBC 中插入默认值