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
'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 |