How to get generated ID after I inserted into a new data record in database using Spring JDBCTemplate?

后端 未结 1 1706
夕颜
夕颜 2021-02-10 03:23

I got a very common question when I was using Spring JDBCTemplate, I want to get the ID value after I inserted a new data record into database, this ID value will be referred to

相关标签:
1条回答
  • 2021-02-10 04:07

    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();
    
    0 讨论(0)
提交回复
热议问题