Подтвердить что ты не робот

Идентификация из вставки sql через jdbctemplate

Можно ли получить идентификатор @@из вставки SQL при вызове шаблона Spring jdbc? Если да, то как?

4b9b3361

Ответ 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" );

Достойная статья здесь.