如何获得生成的ID后,我插入使用Spring的JdbcTemplate在数据库中的一个新的数据记录?

2019-08-08 09:03发布

我得到了我使用Spring的JdbcTemplate时,一个非常普遍的问题,我想以后我插入新的数据记录到数据库中获取的ID值,这个ID值将被称为另一个相关的表。 我尝试以下方法,将其插入,但我始终返回1,而不是其真正的唯一的ID。 (我使用MySQL作为数据库)

public int insert(BasicModel entity) {
    String insertIntoSql = QueryUtil.getInsertIntoSqlStatement(entity);

    log.info("SQL Statement for inserting into: " + insertIntoSql);

    return this.jdbcTemplate.update(insertIntoSql);
}

Answer 1:

JdbcTemplate.update()返回:

受影响的行数

这始终是1INSERT语句。 不同的数据库支持产生的方式不同密钥提取,但大多数JDBC驱动程序摘要和JdbcTemplate支持这一点。 引用12.2.8检索自动生成的键

update()便利方法支持由数据库生成主键的检索。 这种支持是JDBC 3.0标准的一部分; 看到规范细节的章节13.6。

基本上你需要这么多的更详细的声明:

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();


文章来源: How to get generated ID after I inserted into a new data record in database using Spring JDBCTemplate?