Czy można uzyskać tożsamość @@ z wstawienia SQL w wywołaniu szablonu Spring jdbc? Jeśli tak to jak?Identyfikacja z sql insert via jdbctemplate
Odpowiedz
Metoda JDBCTemplate.update
jest przeciążona, aby pobrać obiekt o nazwie GeneratedKeyHolder, za pomocą którego można pobrać wygenerowany automatycznie klucz. Na przykład (kod pochodzi z 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
Jak o SimpleJdbcInsert.executeAndReturnKey?
Wow, tak naprawdę nie wiedziałem o tej klasie - w porządku. Dzięki. +1 – javamonkey79
Podoba mi się ta wersja więcej niż wersja z PreparedStatementCreator. – ruslanys
Dodawanie szczegółowe notatki/przykładowy kod do todd.pierzina odpowiedzieć
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();
Mam do czynienia z tym wyjątkiem: org.springframework.dao.InvalidDataAccessResourceUsageException: Funkcja getGeneratedKeys nie jest obsługiwana przez tę bazę danych –
@ Az.MaYo - Problem może dotyczyć wersji sterownika JDBC. –
To byłby "jeden liniowiec", którego tutaj szukam. Miły. Smutne jest to, że zobaczyłem link, ale pominąłem go z powodu tego: "część standardu JDBC 3.0". (Nie sądzę, że używamy JDBC 3.0, ale nie sądzę, że jest to istotne). – javamonkey79
Staje się prawdziwą liner w Java 8 z lambdas \ m/ – fabwu