当我使用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);
}
解决方法:
the number of rows affected
对于INSERT语句,始终为1.不同的数据库以不同的方式支持生成的密钥提取,但是大多数JDBC驱动程序都是抽象的,JdbcTemplate支持这一点.引用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.
基本上你需要这个更冗长的陈述:
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();