Ich versuche Spring's JdbcTemplate
Klasse zu verwenden, um eine Zeile in eine MySQL-Tabelle mit dem Namen transaction
einzufügen und die generierte ID zu erhalten. Der entsprechende Code ist:Zeile einfügen und generierte ID
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;
}
Aber die folgende Ausnahme wird durch den Aufruf geworfen getJdbcTemplate().update
java.sql.SQLException: Generierte Schlüssel angefordert nicht. Sie müssen Statement.RETURN_GENERATED_KEYS zu Statement.executeUpdate() oder Connection.prepareStatement() angeben.
Kann ich die Zeile einfügen und die generierte ID erhalten, ohne JdbcTemplate
zu verlassen? Ich verwende Spring 2.5, MySQL 5.5.27 und MySQL Connector 5.1.26.
Mit MySQL Ich glaube, Sie anrufen müssen 'LAST_INSERT_ID()'. Siehe [hier] (http://stackoverflow.com/questions/7501464/how-to-get-the-id-of-inserted-row-in-mysql). –