JDBC 개발 - 수정

Minseo Kang·2023년 3월 19일
0
post-thumbnail

수정은 등록과 비슷함
데이터를 변경하는 쿼리는 executeUpdate() 사용




01. MemberRepositoryV0 클래스에 update 메소드 작성 - repository 패키지


  • 회원의 정보를 수정하는 메소드
 public void update(String memberId, int money) throws SQLException {

        String sql = "update member set money=? where member_id=?";

        Connection con = null;
        PreparedStatement pstmt = null;

        try {
            con = getConnection();
            pstmt = con.prepareStatement(sql);
            pstmt.setInt(1, money);
            pstmt.setString(2, memberId);
            int resultSize = pstmt.executeUpdate();
            log.info("resultSize={}", resultSize);
        } catch (SQLException e) {
            log.error("db error", e);
            throw e;
        } finally {
            close(con, pstmt, null);
        }
    }

executeUpdate()

  • 쿼리를 실행하고 영향받은 row 수를 반환
  • 여기서는 하나의 데이터만 변경
  • 결과로 1이 반환됨
  • 회원이 100명이고, 모든 회원의 데이터를 한번에 수정하는 update sql 실행 시 결과는 100



02. MemberRepositoryV0Test(테스트 코드) 작성


  • 회원 데이터의 money를 10000에서 20000으로 수정
  • DB에서 데이터 다시 조회에서 20000으로 수정되었는지 확인
package hello.jdbc.repository;

import hello.jdbc.domain.Member;
import lombok.extern.slf4j.Slf4j;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.Test;
import java.sql.SQLException;
import java.util.NoSuchElementException;

@Slf4j
class MemberRepositoryV0Test {

    MemberRepositoryV0 repository = new MemberRepositoryV0();

    @Test
    void crud() throws SQLException {

        // save
        Member member = new Member("memberV2", 10000);
        repository.save(member);

        // findById
        Member findMember = repository.findById(member.getMemberId());
        log.info("findMember={}", findMember);
        Assertions.assertThat(findMember).isEqualTo(member);

        // update : money 10000 -> 20000
        repository.update(member.getMemberId(), 20000);
        Member updatedMember = repository.findById(member.getMemberId());
        Assertions.assertThat(updatedMember.getMoney()).isEqualTo(20000);
	}
        
}

테스트 코드 실행 결과

  • pstmt.executeUpdate() 결과가 1
  • 해당 SQL에 영향을 받은 row 수가 1개
  • 데이터베이스에서 조회하면 memberV2money가 20000으로 변경됨

0개의 댓글