-
[Spring-Error] H2 데이터베이스 쿼리 삽입 안 되는 문제legacy/Spring 2023. 6. 29. 00:35
내가 겪은 문제
스프링에서 jdbc connection을 정상적으로 가져왔는데도 sql 삽입문이 처리가 되지 않는 문제가 발생했다.
에러 내용 : Method is only allowed for a query. Use execute or executeUpdate instead of executeQuery; SQL statement: 해결
참 바보 같은 행동을 하고 있었다. insert문을 작성해놓고 select문처럼 사용하고 있었다.
insert문을 사용하였으니 executeQuery()가 아니라 executeUpdate()를 사용해야 한다.
기존 코드
@Slf4j public class MemberRepository { public Member save(Member member) throws SQLException { String sql = "insert into member(member_id, money) values(?, ?)"; Connection conn = null; PreparedStatement psmt = null; try { conn = DbConnectionUtil.getConnection(); psmt = conn.prepareStatement(sql); psmt.setString(1, member.getMember_id()); psmt.setInt(2, member.getMoney()); psmt.executeQuery(); // 문제 코드 return member; } catch (SQLException ex) { .. 생략 } finally { .. 생략 } return null; } .. 메서드 생략 }
수정 코드
@Slf4j public class MemberRepository { public Member save(Member member) throws SQLException { String sql = "insert into member(member_id, money) values(?, ?)"; // 문제 지점 Connection conn = null; PreparedStatement psmt = null; try { conn = DbConnectionUtil.getConnection(); psmt = conn.prepareStatement(sql); psmt.setString(1, member.getMember_id()); psmt.setInt(2, member.getMoney()); psmt.executeUpdate(); // 코드 수정 return member; } catch (SQLException ex) { .. 생략 } finally { .. 생략 } return null; } .. 메서드 생략 }
결론
insert, update, delete는 executeUpdate()
select는 executeQuery()
알맞게 사용하자.