수정과 삭제를 추가시켰다. 똑같다. 수정 및 삭제하는 쿼리문을 만들고, 적절하게 바인딩 한뒤 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 |