Spring JDBC - 最后插入的id

时间:2011-04-18 13:01:10

标签: postgresql spring-mvc jdbctemplate spring-jdbc

我正在使用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();

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

自PostgreSql Ver 8.4-701起,支持“为PreparedStatements生成的密钥”。