KeyHolder, JdbcTemplate key 자동 생성

허진수·2021년 7월 30일
0

Spring

목록 보기
3/3

데이터베이스에 데이터 추가

데이터를 추가 할 때 주요 키 는 자동 생성하고 생성된 키를 받으려 할 때 보통 PreparedStatementCreatorFactory 를 이용할 것입니다.

taco.setCreatedAt(new Date());
PreparedStatementCreator psc = new PreparedStatementCreatorFactory(
		"insert into Taco (name, createdAt) values (?, ?)", Types.VARCHAR, Types.TIMESTAMP)
        .newPreparedStatementCreator(
        Arrays.asList(taco.getName(), new Timestamp(taco.getCreatedAt().getTime())));

KeyHolder keyHolder = new GeneratedKeyHolder();
jdbc.update(psc, keyHolder);

return keyHolder.getKey().longValue();

다음과 같이 사용했는데 keyHolder.getKey()부분에 nullPoint에러가 뜨더군요
찾아보니 PreparedStatementCreatorFactory에 ReturnGeneratedKeys값이 기본적으로 false라서 key를 반환하지 않았습니다.

그래서 아래와 같이 수정해 주어야 했습니다.

taco.setCreatedAt(new Date());

PreparedStatementCreatorFactory pscFactory = new PreparedStatementCreatorFactory(
		"insert into Taco (name, createdAt) values (?, ?)", Types.VARCHAR, Types.TIMESTAMP);

pscFactory.setReturnGeneratedKeys(true);

PreparedStatementCreator psc = pscFactory.newPreparedStatementCreator(
		Arrays.asList(taco.getName(), new Timestamp(taco.getCreatedAt().getTime())));

KeyHolder keyHolder = new GeneratedKeyHolder();
jdbc.update(psc, keyHolder);

return keyHolder.getKey().longValue();

수정 후에 정상 작동됐고, 에러도 사라졌습니다.


h2 콘솔 사용법

h2를 사용할 때 dependency에 추가를 해줍니다.

<dependency>
	<groupId>com.h2database</groupId>
	<artifactId>h2</artifactId>
	<version>1.4.200</version>
</dependency>

후에 localhose:8080/h2-console 로 들어가면 로그인창이 뜹니다.

spring을 시작시키면 콘솔창에 H2 console available at '/h2-console'. Database available at 라는 로그가 뜹니다.
여기의 url을 사진의 JDBC URL에 입력을 하고 연결하면 됩니다.

profile
안녕하세요

0개의 댓글