È possibile ottenere l'identità @@ dall'inserto SQL in una chiamata modello jdbc Spring? Se é cosi, come?identità da sql insert tramite jdbctemplate
risposta
Il metodo JDBCTemplate.update
è sovraccarico per prendere un oggetto denominato GeneratedKeyHolder che è possibile utilizzare per recuperare la chiave generata automaticamente. Per esempio (codice tratto da here):
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
Come su SimpleJdbcInsert.executeAndReturnKey?
Wow, non sapevo davvero di quella classe - un po 'pulito. Grazie. +1 – javamonkey79
Mi piace questa versione più della versione con PreparedStatementCreator. – ruslanys
Aggiunta di note dettagliate/codice di esempio per todd.pierzina rispondere
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();
Sono di fronte a questa eccezione: org.springframework.dao.InvalidDataAccessResourceUsageException: la funzione getGeneratedKeys non è supportata da questo database –
@ Az.MaYo: il problema potrebbe essere correlato alla versione del driver JDBC. –
Quello sarebbe il "one liner" che sto cercando qui. Bello. La cosa triste è che ho visto il collegamento ma l'ho sorpassato a causa di questo: "parte dello standard JDBC 3.0". (Non penso che usiamo JDBC 3.0, ma non penso che questo sia rilevante). – javamonkey79
Ottenendo un vero e proprio rivestimento in Java 8 con lambdas \ m/ – fabwu