JDBC - 조회

박찬우·2024년 2월 1일

스프링 DB

목록 보기
3/53

회원 리포지토리

  • 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 {
	// create
	Member member = new Member("memberV0", 10000);
	repository.save(member);

	// read
	Member findMember = repository.findById(member.getMemberId());
	Assertions.assertThat(member.getMemberId()).isEqualTo(findMember.getMemberId());
}
profile
진짜 개발자가 되어보자

0개의 댓글