legacy/Spring

[Spring-Error] H2 데이터베이스 쿼리 삽입 안 되는 문제

heemang_e 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()

알맞게 사용하자.