How to get generated ID after I inserted into a new data record in database using Spring JDBCTemplate?
JdbcTemplate.update()
returns:
the number of rows affected
Which is always 1
for INSERT
statement. Different databases support generated key extraction in different ways, but most JDBC drivers abstract this and JdbcTemplate
supports this. Quoting 12.2.8 Retrieving auto-generated keys
An
update()
convenience method supports the retrieval of primary keys generated by the database. This support is part of the JDBC 3.0 standard; see Chapter 13.6 of the specification for details.
Basically you need this much more verbose statement:
final String insertIntoSql = QueryUtil.getInsertIntoSqlStatement(entity);
KeyHolder keyHolder = new GeneratedKeyHolder();
jdbcTemplate.update(
new PreparedStatementCreator() {
public PreparedStatement createPreparedStatement(Connection connection) throws SQLException {
return connection.prepareStatement(insertIntoSql, new String[] {"id"});
}
}, keyHolder);
return keyHolder.getKey().intValue();