ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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()

    알맞게 사용하자.

Designed by Tistory.