Можно ли получить идентификатор @@из вставки SQL при вызове шаблона Spring jdbc? Если да, то как?
Идентификация из вставки sql через jdbctemplate
Ответ 1
Метод JDBCTemplate.update
перегружен, чтобы взять объект с именем GeneratedKeyHolder, который вы можете использовать для извлечения автогенерированного ключа. Например (код, взятый из здесь):
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
Ответ 2
Как насчет SimpleJdbcInsert.executeAndReturnKey?
Ответ 3
Добавление подробных заметок/пример кода в ответ todd.pierzina
jdbcInsert = new SimpleJdbcInsert(jdbcTemplate);
jdbcInsert.withTableName("TABLE_NAME").usingGeneratedKeyColumns(
"Primary_key");
Map<String, Object> parameters = new HashMap<String, Object>();
parameters.put("Column_NAME1", bean.getval1());
parameters.put("Column_NAME2", bean.getval2());
// execute insert
Number key = jdbcInsert.executeAndReturnKey(new MapSqlParameterSource(
parameters));
// convert Number to Int using ((Number) key).intValue()
return ((Number) key).intValue();
Ответ 4
Я не знаю, есть ли "однострочный", но это похоже на трюк (по крайней мере для MSSQL):
// -- call this after the insert query...
this._jdbcTemplate.queryForInt( "select @@identity" );
Достойная статья здесь.