Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Proxy
- 그리디
- 스프링 핵심 기능
- SpringBoot
- db
- java
- kotlin
- JDBC
- pointcut
- QueryDSL
- transaction
- 김영한
- 인프런
- Servlet
- AOP
- 알고리즘
- jpa
- Greedy
- 백준
- springdatajpa
- 스프링
- Exception
- Spring Boot
- http
- Thymeleaf
- Android
- 자바
- JPQL
- spring
- 스프링 핵심 원리
Archives
- Today
- Total
개발자되기 프로젝트
JDBC 개발-조회 본문
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