스프링/5. 스프링 DB-1

7. 수정, 삭제

sdafdq 2023. 9. 28. 13:43

수정과 삭제를 추가시켰다. 똑같다. 수정 및 삭제하는 쿼리문을 만들고, 적절하게 바인딩 한뒤 excuteUpdate() 하면 된다.

직접적으로 DB의 데이터를 바꾸는 거니 excuteUpdate()를 써야 한다.

public void update(String memberId, int money){
    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 result = pstmt.executeUpdate();
        log.info("result = {}",result);
    }catch(SQLException e){
        log.info("error",e);
    }finally {
        close(con, pstmt,null);
    }
}

public void delete(String memberId) throws SQLException {
    String sql = "delete from member where member_id=?";

    Connection con = null;
    PreparedStatement pstmt = null;
    try{
        con = getConnection();
        pstmt = con.prepareStatement(sql);
        pstmt.setString(1,memberId);
        pstmt.executeUpdate();
    }catch(SQLException e){
        throw e;
    }finally {
        close(con, pstmt, null);
    }
}

참고로, excuteUpdate()의 반환값은 영향받은 DB의 갯수이다.

지금은 멤버id로 찾아서 그 부분을 바꾸고, 또 member_id가 db상에서 primary key라 하나밖에 존재할 수 없다.

그러기 때문에 만약 jdbc를 이용해 db상에서 뭔가 c,u,d 등을 했다면, excuteUpdate의 값은 0 혹은 1 밖에 될 수 없다.

update, delete등은 바꿀 member_id가 db상에 존재하면 바꿀 수 있으니 1, 없으면 0

create(insert)의 경우는 만약 db상에 member_id가 존재하면 PrimaryKey이기 때문에 만들 수 없어 0, 없으면 만들 수 있어 1

만약 뭐 예를들어 where money=1000 이런 식으로 해서 money 가 1000인 사람을 모두 바꾼다면 그 바꾼 DB의 갯수만큼 반환되는 것이다.

 

 

MemberRepositoryV0 repository = new MemberRepositoryV0();
@Test
public void crud() throws SQLException {

    String memberId= "member";
    Member member = new Member(memberId,14000);
    repository.save(member);

    Member resultMember = repository.findById(member.getMemberId());
    assertThat(member).isEqualTo(resultMember);

    repository.update(memberId,16000);
    Member updateMember = repository.findById(memberId);
    assertThat(updateMember.getMoney()).isEqualTo(16000);

    repository.delete(memberId);
    assertThatThrownBy(()->repository.findById(memberId))
            .isInstanceOf(NoSuchElementException.class);
}

테스트 코드.

 

참고로, 

assertThatThrownBy는 thrown, 뭔가 예외가 던져진 By 뭐에 의해 인데,

() -> 이행동을했을때

.isInstanceOf(예외클래스)

이 때 던져진 예외가 이것 이라면 정상작동.

 

예외가 나게끔 코딩한 것을 테스트 할 때 좋다.

 

'스프링 > 5. 스프링 DB-1' 카테고리의 다른 글

9. DataSource  (0) 2023.09.28
8. 커넥션 풀  (0) 2023.09.28
6. 조회  (0) 2023.09.27
5. JDBC 등록  (0) 2023.09.27
4. DB에 연결  (0) 2023.09.26