복붙노트

[SPRING] jdbctemplate를 통해 SQL 삽입의 ID

SPRING

jdbctemplate를 통해 SQL 삽입의 ID

Spring jdbc 템플릿 호출에서 SQL insert로부터 @@ identity를 얻을 수 있습니까? 그렇다면 어떻게?

해결법

  1. ==============================

    1.JDBCTemplate.update 메소드는 자동 생성 된 키를 검색하는 데 사용할 수있는 GeneratedKeyHolder라는 객체를 가져 오기 위해 오버로드됩니다. 예를 들어 (여기에서 가져온 코드) :

    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
    
  2. ==============================

    2.SimpleJdbcInsert.executeAndReturnKey는 어떻습니까? 입력에 따라 두 가지 형식이 필요합니다.

    SimpleJdbcInsert.executeAndReturnKey는 어떻습니까? 입력에 따라 두 가지 형식이 필요합니다.

  3. ==============================

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

    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();
    
  4. ==============================

    4.나는 "one-liner"가 있는지 모르지만 이것은 (적어도 MSSQL의 경우) 트릭을 수행하는 것으로 보인다.

    나는 "one-liner"가 있는지 모르지만 이것은 (적어도 MSSQL의 경우) 트릭을 수행하는 것으로 보인다.

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

    여기에 괜찮은 기사.

  5. from https://stackoverflow.com/questions/1665846/identity-from-sql-insert-via-jdbctemplate by cc-by-sa and MIT license