Я пытаюсь использовать класс Spring JdbcTemplate
, чтобы вставить строку в таблицу MySQL с именем transaction
и получить сгенерированный идентификатор. Соответствующий код:
public Transaction insertTransaction(final Transaction tran) {
// Will hold the ID of the row created by the insert
KeyHolder keyHolder = new GeneratedKeyHolder();
getJdbcTemplate().update(new PreparedStatementCreator() {
public PreparedStatement createPreparedStatement(Connection connection) throws SQLException {
PreparedStatement ps = connection.prepareStatement(INSERT_TRAN_SQL);
ps.setString(1, tran.getTransactionType().toString());
Date sqlDate = new Date(tran.getDate().getTime());
ps.setDate(2, sqlDate);
ps.setString(3, tran.getDescription());
return ps;
}
}, keyHolder);
tran.setId(keyHolder.getKey().longValue());
return tran;
}
Но следующее исключение вызывается вызовом getJdbcTemplate().update
java.sql.SQLException: сгенерированные ключи не запрошены. Вам нужно указать Statement.RETURN_GENERATED_KEYS в Statement.executeUpdate() или Connection.prepareStatement().
Могу ли я вставить строку и получить сгенерированный идентификатор, не отказываясь от JdbcTemplate
? Я использую Spring 2.5, MySQL 5.5.27 и MySQL Connector 5.1.26.
last_insert_id()
. См. здесь. - person Sotirios Delimanolis   schedule 30.09.2013