programing

jdbct 템플릿을 통해 sql insert의 ID

powerit 2023. 7. 7. 21:12
반응형

jdbct 템플릿을 통해 sql insert의 ID

Spring jdbc 템플릿 호출의 SQL insert에서 @@identity를 가져올 수 있습니까?만약 그렇다면, 어떻게?

JDBCTemplate.updateGeneratedKey라는 개체를 가져오기 위해 메서드가 오버로드되었습니다.자동 생성된 키를 검색하는 데 사용할 수 있는 홀더입니다.예: (여기서 가져온 코드)

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입력에 따라 두 가지 형태가 있습니다.

입력은 다음과 같습니다.Map

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

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

전달된 값을 사용하여 삽입을 실행하고 생성된 키를 반환합니다.이렇게 하려면 자동으로 생성된 키가 있는 열의 이름을 지정해야 합니다.이 메서드는 항상 다음을 반환합니다.KeyHolder그러나 발신자는 생성된 키가 실제로 포함되어 있는지 확인해야 합니다.

지정자:

executeAndReturnKey 인터페이스로

매개 변수:

args - Map containing column names and corresponding value

반환:

the generated key value

입력은 다음과 같습니다.SqlParameterSource

public java.lang.Number executeAndReturnKey(SqlParameterSourceparameterSource)

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

전달된 값을 사용하여 삽입을 실행하고 생성된 키를 반환합니다.이렇게 하려면 자동으로 생성된 키가 있는 열의 이름을 지정해야 합니다.이 메서드는 항상 다음을 반환합니다.KeyHolder그러나 발신자는 생성된 키가 실제로 포함되어 있는지 확인해야 합니다.

지정자:

executeAndReturnKey 인터페이스로

매개 변수:

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

여기 괜찮은 기사야.

언급URL : https://stackoverflow.com/questions/1665846/identity-from-sql-insert-via-jdbctemplate

반응형