Frage

Ist es möglich, die @@ Identität aus dem SQL-Einsatz auf einer Feder jdbc Vorlage Anruf zu bekommen? Wenn ja, wie?

War es hilfreich?

Lösung

Die JDBCTemplate.update Methode ist überlastet, ein Objekt zu nehmen ein GeneratedKeyHolder genannt, die Sie den automatisch generierten Schlüssel abrufen können. Zum Beispiel (Code genommen von hier ):

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

Andere Tipps

Wie wäre es SimpleJdbcInsert.executeAndReturnKey? Es nimmt zwei Formen an, abhängig von der Eingabe:

(1) Die Eingabe ist ein Map

  

public java.lang.Number executeAndReturnKey(java.util.Map<java.lang.String,?> args)

     

Beschreibung von Schnittstelle kopiert: SimpleJdbcInsertOperations

     

Führen Sie den Einsatz mit den übergebenen Werte in und gibt den erzeugten Schlüssel.   Dies erfordert, dass der Name der Spalten mit automatisch generierten Schlüssel angegeben wurden. Diese Methode wird immer ein KeyHolder zurück, aber der Anrufer muss überprüfen, ob es die generierten Schlüssel tatsächlich enthält.

     

Definiert durch:

     

executeAndReturnKey in Schnittstelle SimpleJdbcInsertOperations

     

Parameter:

     

args - Map containing column names and corresponding value

     

Returns:

     

the generated key value

(2) Die Eingabe ist ein SqlParameterSource

  

public java.lang.Number executeAndReturnKey( SimpleJdbcInsertOperations

     

Führen Sie den Einsatz mit den übergebenen Werte in und gibt den erzeugten Schlüssel.   Dies erfordert, dass der Name der Spalten mit automatisch generierten Schlüssel angegeben wurden. Diese Methode wird immer ein KeyHolder zurück, aber der Anrufer muss überprüfen, ob es die generierten Schlüssel tatsächlich enthält.

     

Definiert durch:

     

executeAndReturnKey in Schnittstelle SimpleJdbcInsertOperations

     

Parameter:

     

parameterSource - SqlParameterSource containing values to use for insert

     

Returns:

     

den erzeugten Schlüsselwert.

Hinzufügen detaillierte Notizen / Beispielcode todd.pierzina beantworten

jdbcInsert = new SimpleJdbcInsert(jdbcTemplate);
        jdbcInsert.withTableName("TABLE_NAME").usingGeneratedKeyColumns(
                "Primary_key");
        Map<String, Object> parameters = new HashMap<>();
        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();

Ich weiß nicht, ob es ein „one-liner“, aber dies scheint den Trick zu tun (für MSSQL mindestens):

// -- call this after the insert query...
this._jdbcTemplate.queryForInt( "select @@identity" );

Decent Artikel hier .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top