JDBC 이해

존스노우·2023년 11월 11일
0

  • 옛날에는 디비마다 연결 sql 응답등 다달라서 표준이 등장함
  • 아 이것도 추상화를해서 이렇게...
  • 추상화를 하면 밖에서 뭘 쓰든 이 규격에 가져와!

  • Jdbc 각 회사의 드라이버들. 구현체 라이브러리.

  • 그림을 보니 이해가 쉽다
  • 2가지 문제가 해결됨
  • 다른 종류의 디비로 변경해도 jdbc에만 의존하면 됨.
  • jdbc 표준 인터페이스 사용법만 학습하면됨 , 이제 새로운 sql 전달 커넥션 결등 응답등 디비마다 다른 규격을 공부하지 않아도 됨

  • 허나 몇가지 문제점이있어서 JPA를 사용하면 이런 문제는 해결 됨.

  • jdbc의 역사!
  • 어떻게 Mapper 정말 많이 사용했는대
  • jdbc 사용방법이 좀 복잡함 Low레벨로 동작하고 너무 옛날임

-jpa 쉽게쉽게 넘어가자

  • 연결정보 설정 !
  • 데이터베이스에 연결하려면 JDBC가 제공하는 DriverManager.getConnection(..) 를 사용하면 됨
  • 라이브러리에 있는 데이터베이스 드라이버를 찾아서 해당 드라이버가 제공하는 커넥션을 반환 해준다.

  • 애를 통해서 디비에 들어감

  • 확인해보면 !

  • 설정 정보 나옴

  • 위에 Connect 에는 결국

  • 이 구현체를 제공함 (H2 디비를쓰고 잇어서)

  • 접속정보 적고 보내면 드라이버에 다던진다
  • 그래서 드라이버에게 본인이 처리할수 있는지 요청을 확인.

  • 요렇게 등록도 해줘야됨


  • Prepared는 파라미터 바인딩 가능 그냥 statement는 sql 만
  • 예외가 터지면 할 수 있는게 없기때문에 이런식으로

  • 디비에 실행되게 코드나머지 작성
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, rs);
	} 
}
  • 조회 기능 흐음

  • rs 는 무엇일까?

  • 그림처럼 생긴 자료구조이고 그냥 데이터를 가지고 있다.
  • 조회 수정 삭제는 비슷해서 생략
profile
어제의 나보다 한걸음 더

0개의 댓글