jdbct 템플릿을 통해 sql insert의 ID
Spring jdbc 템플릿 호출의 SQL insert에서 @@identity를 가져올 수 있습니까?만약 그렇다면, 어떻게?
그JDBCTemplate.update
GeneratedKey라는 개체를 가져오기 위해 메서드가 오버로드되었습니다.자동 생성된 키를 검색하는 데 사용할 수 있는 홀더입니다.예: (여기서 가져온 코드)
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(
SqlParameterSource
parameterSource)
인터페이스에서 복사한 설명:
전달된 값을 사용하여 삽입을 실행하고 생성된 키를 반환합니다.이렇게 하려면 자동으로 생성된 키가 있는 열의 이름을 지정해야 합니다.이 메서드는 항상 다음을 반환합니다.
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
'programing' 카테고리의 다른 글
C에서 null이 아닌 종료 문자열을 strncmp로 전달하는 것이 합법입니까? (0) | 2023.07.07 |
---|---|
'while' 및 'for' 루프의 범위는 무엇입니까? (0) | 2023.07.07 |
Oracle에서 MySQL로 마이그레이션 (0) | 2023.07.07 |
생성자 주입 없이 서비스 인스턴스를 가져오는 중 (0) | 2023.07.07 |
로컬 리포지토리의 파일과 오리진 간의 차이 (0) | 2023.07.07 |