
회원 리포지토리
executeQuery() 는 결과를 ResultSet 에 담아서 반환한다.
- ResultSet
- select 쿼리의 결과가 순서대로 들어간다
- 내부에 있는 커서(
cursor )를 이동해서 다음 데이터를 조회할 수 있다
rs.next() : 이것을 호출하면 커서가 다음으로 이동한다. 참고로 최초의 커서는 데이터를 가리키고 있지 않기 때문에 rs.next() 를 최초 한번은 호출해야 데이터를 조회할 수 있다. (값이 있는 경우 true 없으면 false 반환함)
@Slf4j
public class MemberRepositoryV0 {
...
public Member findById(String memberId) throws SQLException {
String sql = "select * from member where member_id = ?";
Connection con = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
con = getConnection();
pstmt = con.prepareStatement(sql);
pstmt.setString(1, memberId);
rs = pstmt.executeQuery();
if(rs.next()) {
Member member = new Member();
member.setMemberId(rs.getString("member_id"));
member.setMoney(rs.getInt("money"));
return member;
} else {
throw new NoSuchElementException("member not found memberId=" + memberId);
}
} catch(SQLException e) {
log.error("db error", e);
throw e;
} finally {
close(con, pstmt, null);
}
}
...
TEST
@Test
void crud() throws SQLException {
Member member = new Member("memberV0", 10000);
repository.save(member);
Member findMember = repository.findById(member.getMemberId());
Assertions.assertThat(member.getMemberId()).isEqualTo(findMember.getMemberId());
}