当我通过jdbctemplate在表中插入记录时,如何获取自动增加的id

private void insertIntoMyTable (Myclass m) { String query = "INSERT INTO MYTABLE (NAME) VALUES (?)"; jdbcTemplate.update(query, m.getName()); } 

当上面的查询插入记录时,表中的ID列会自动增量。

有没有办法在插入时获得此自动递增的ID。 所以在这个例子中,我的方法的返回值将是int

检查此参考。 您可以使用jdbcTemplate.update作为:

编辑按要求添加了导入

 import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.PreparedStatementCreator; import org.springframework.jdbc.support.GeneratedKeyHolder; import org.springframework.jdbc.support.KeyHolder; 

以下是代码用法:

 final String INSERT_SQL = "insert into my_test (name) values(?)"; final String name = "Rob"; KeyHolder keyHolder = new GeneratedKeyHolder(); jdbcTemplate.update( new PreparedStatementCreator() { public PreparedStatement createPreparedStatement(Connection connection) throws SQLException { PreparedStatement ps = connection.prepareStatement(INSERT_SQL, new String[] {"id"}); ps.setString(1, name); return ps; } }, keyHolder); // keyHolder.getKey() now contains the generated key 

插入后,我得到数据库(MSSQL)生成的id,导入:

  import org.springframework.jdbc.core.BeanPropertyRowMapper; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.RowMapper; import org.springframework.jdbc.core.SqlParameter; import org.springframework.jdbc.core.SqlReturnResultSet; import org.springframework.jdbc.core.simple.SimpleJdbcCall; 

和代码片段:

  final String INSERT_SQL = "INSERT INTO [table]\n" + " ([column_1]\n" + " ,[column_2])\n" + " VALUES\n" + " (?, ?)"; Connection connection = jdbcTemplate.getDataSource().getConnection(); PreparedStatement preparedStatement = connection.prepareStatement(INSERT_INVOICE_SQL, Statement.RETURN_GENERATED_KEYS); preparedStatement.setString(1, "test 1"); preparedStatement.setString(2, "test 2"); preparedStatement.executeUpdate(); ResultSet keys = preparedStatement.getGeneratedKeys(); if (keys.next()) { Integer generatedId = keys.getInt(1); //id returned after insert execution } 

JdbcTemplate是Spring的核心。 另一种选择是使用SimpleJdbcInsert 。

 SimpleJdbcInsert simpleJdbcInsert = new SimpleJdbcInsert(jdbcTemplate); simpleJdbcInsert .withTableName("TABLENAME") .usingGeneratedKeyColumns("ID"); SqlParameterSource params = new MapSqlParameterSource() .addValue("COL1", model.getCol1()) .addValue("COL2", model.getCol2()); Number number = simpleJdbcInsert.executeAndReturnKey(params); 

你仍然可以@Autowire jdbcTemplate。 对我来说,这比使用jdbcTemplate.update()方法和KeyHolder获取实际id更方便。

示例代码段使用Apache Derby进行测试,并且应该与常用数据库一起使用。

使用Spring JPA是另一种选择 – 如果ORM适合您。