반응형
💋 문제의 코드
Spring JDBC에서 NamedParameterJdbcTemplate을 사용하던 중에, 아래와 같은 오류를 만났다.
No value supplied for the SQL parameter 'gameId': No value registered for key 'gameId’
public void insertPlayer(List<RacingCarStatusResponse> responses, List<String> winnerNames, int gameId) {
String sql = "INSERT INTO player(name, position, game_id, is_winner) VALUES(:name, :position, :gameId, :isWinner)";
System.out.println(gameId);
for (RacingCarStatusResponse response : responses) {
SqlParameterSource namedParameters = new MapSqlParameterSource()
.addValue("name", response.getName())
.addValue("position", response.getPosition())
.addValue("game_id", gameId)
.addValue("is_winner", winnerNames.contains(response.getName()));
namedParameterJdbcTemplate.update(sql, namedParameters);
}
}
💋 문제의 원인
문제점은 아래와 같았다.
String sql = "INSERT INTO player(name, position, game_id, is_winner) VALUES(:name, :position, :gameId, :isWinner)";
NamedParameterJdbcTemplate에서 매핑할 변수명으로 인식하는 것은 gameId, isWinner인데,
아래에서 SqlParameterSource로 지정하고 있는건 game_id, is_winner여서, 앞에 있는 gameId를 찾을 수 없다는 것이었다.
💋 문제 해결
문제를 해결한 코드를 첨부하고 오늘 포스팅을 끝낸다.
public void insertPlayer(List<RacingCarStatusResponse> responses, List<String> winnerNames, int gameId) {
String sql = "INSERT INTO player(name, position, game_id, is_winner) VALUES(:name, :position, :game_id, :is_winner)";
System.out.println(gameId);
for (RacingCarStatusResponse response : responses) {
SqlParameterSource namedParameters = new MapSqlParameterSource()
.addValue("name", response.getName())
.addValue("position", response.getPosition())
.addValue("game_id", gameId)
.addValue("is_winner", winnerNames.contains(response.getName()));
namedParameterJdbcTemplate.update(sql, namedParameters);
}
}
끗
반응형
'MySQL' 카테고리의 다른 글
[MySQL] MVCC와 언두 로그(Undo log) (0) | 2023.08.29 |
---|---|
[MySQL] MySQL 엔진의 락 (Lock) (0) | 2023.08.15 |
[MySQL] MySQL 아키텍처: 접속 클라이언트, MySQL 엔진, 스토리지 엔진, 운영 체제, 하드웨어 (0) | 2023.08.14 |
[MySQL] 트랜잭션: 트랜잭션의 개념, 주의사항, 트랜잭션 VS 락 (Real MySQL 8.0) (0) | 2023.08.13 |
[MySQL] ON DELETE CASCADE: foreign key로 묶인 테이블의 레코드를 삭제할 때, 해당 레코드를 참조하는 다른 테이블의 레코드도 함께 자동으로 삭제하기 (0) | 2023.05.08 |