Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

개발자되기 프로젝트

JDBC 개발-조회 본문

인프런/[인프런] 스프링 DB 1편 - 데이터 접근 핵심 원리

JDBC 개발-조회

Seung__ 2022. 5. 23. 22:27

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();//select는 executeQuery
        if (rs.next()){//데이터 있으면 true, 내부 커서를 한번 호출을 해야 데이터가 있는 곳으로 이동함.
            Member member = new Member();
            member.setMemberId(rs.getString("member_id"));
            member.setMoney(rs.getInt("money"));

            return member;
        }else{//데이터 없는 경우
             throw new NoSuchElementException("member not fond memberId="+memberId);
        }
    } catch (SQLException e) {
        log.info("db error", e);
        throw e;
    }finally {//리소스 닫기.
        close(con, pstmt, rs);
    }

}

 

MemberRepositoryV0Test - 회원 조회 추가

@Test
void crud() throws SQLException {
    //save
    Member member = new Member("memberV1", 10000);
    repository.save(member);


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


}

 

 

findById() - 쿼리 실행

  • sql : 데이터 조회를 위한 select SQL을 준비한다.
  • rs = pstmt.executeQuery() 데이터를 변경할 때는 executeUpdate() 를 사용하지만, 
  • 데이터를  조회할 때는 executeQuery() 를 사용한다. 
  • executeQuery() 는 결과를 ResultSet 에 담아서 반환한다.

 

ResultSet

  • ResultSet 은 다음과 같이 생긴 데이터 구조이다.
  • 보통 select 쿼리의 결과가 순서대로 들어간다.
    - 예를 들어서 select member_id, money 라고 지정하면  member_id , money 라는 이름으로 데이터가 저장된다.
    - 참고로 select * 을 사용하면 테이블의 모든 컬럼을 다 지정한다.
  • ResultSet 내부에 있는 커서( cursor )를 이동해서 다음 데이터를 조회할 수 있다.
  • rs.next() : 이것을 호출하면 커서가 다음으로 이동한다. 
    참고로 최초의 커서는 데이터를 가리키고 있지 않기 때문에 
    rs.next() 를 최초 한번은 호출해야 데이터를 조회할 수 있다.
    - rs.next() 의 결과가 true 면 커서의 이동 결과 데이터가 있다는 뜻이다.
    - rs.next() 의 결과가 false 면 더이상 커서가 가리키는 데이터가 없다는 뜻이다.
  • rs.getString("member_id") : 현재 커서가 가리키고 있는 위치의 member_id 데이터를 String 타입으로 반환한다.
  • rs.getInt("money") : 현재 커서가 가리키고 있는 위치의 money 데이터를 int 타입으로 반환한다.

'인프런 > [인프런] 스프링 DB 1편 - 데이터 접근 핵심 원리' 카테고리의 다른 글

커넥션 풀 이해  (0) 2022.05.29
JDBC 개발 - 수정, 삭제  (0) 2022.05.28
JDBC개발-등록  (0) 2022.05.23
DB 연결  (0) 2022.05.22
JDBC와 최신 데이터 접근 기술  (0) 2022.05.22
Comments