문제

스프링 JDBC 템플릿 호출에서 SQL 삽입물에서 @@ Identity를 얻을 수 있습니까? 그렇다면 어떻게?

도움이 되었습니까?

해결책

그만큼 JDBCTemplate.update 메소드는자가 생성 키를 검색하는 데 사용할 수있는 GeneratedKeyholder라는 객체를 가져 오도록 과부하되어 있습니다. 예를 들어 (코드에서 가져온 코드 여기):

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

다른 팁

어때 SimpleJdbcInsert.executeAndReturnKey? 입력에 따라 두 가지 형태가 필요합니다.

(1) 입력은 a Map

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

설명 인터페이스에서 복사 : SimpleJdbcInsertOperations

전달 된 값을 사용하여 삽입물을 실행하고 생성 된 키를 반환하십시오. 이를 위해서는 자동 생성 키가있는 열의 이름을 지정해야합니다. 이 방법은 항상 a를 반환합니다 KeyHolder 그러나 발신자는 실제로 생성 된 키가 포함되어 있는지 확인해야합니다.

지정 :

executeAndReturnKey 인터페이스에서 SimpleJdbcInsertOperations

매개 변수 :

args - Map containing column names and corresponding value

보고:

the generated key value

(2) 입력은 a SqlParameterSource

public java.lang.Number executeAndReturnKey(SqlParameterSourceparameterSource)

설명 인터페이스에서 복사 : SimpleJdbcInsertOperations

전달 된 값을 사용하여 삽입물을 실행하고 생성 된 키를 반환하십시오. 이를 위해서는 자동 생성 키가있는 열의 이름을 지정해야합니다. 이 방법은 항상 a를 반환합니다 KeyHolder 그러나 발신자는 실제로 생성 된 키가 포함되어 있는지 확인해야합니다.

지정 :

executeAndReturnKey 인터페이스에서 SimpleJdbcInsertOperations

매개 변수 :

parameterSource - SqlParameterSource containing values to use for insert

보고:

생성 된 키 값.

Todd.pierzina 답변에 자세한 메모/샘플 코드 추가

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();

"원 라이너"가 있는지 모르겠지만 이것은 트릭을 수행하는 것 같습니다 (적어도 MSSQL에 대한).

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

괜찮은 기사 여기.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top