데이터를 추가 할 때 주요 키 는 자동 생성하고 생성된 키를 받으려 할 때 보통 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를 사용할 때 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에 입력을 하고 연결하면 됩니다.