스프링 DB 1편 - 데이터 접근 핵심 원리<섹션 1. JDBC 이해>

김성훈·2022년 8월 23일
0

스프링 DB 인프런

목록 보기
4/8
post-thumbnail

회원 객체 데이터베이스 저장

  1. 커넥션 획득
    getConnection() 을 통해 이전에 만들어둔 DBConnectionUtil 에서 데이터베이스 커넥션을 획득한다.

  2. save() - SQL 전달
    sql : 데이터 베이스에 전달할 SQL 정의 (데이터를 등록 하기 위해 insert sql 사용)

    con.prepareStatement(sql): 데이터베이스에 전달할 SQL 과 파라미터로 전달할 데이터들을 준비

    sql : insert into member(member_id, money) values(?,?)

    pstmt.setString(1,member.getMemberId()): SQL 첫번째 ?에 값을 지정
    문자열 이므로 setString 사용

    pstmt.setInt(2, member.getMoney()): SQL 두번째 ?에 값을 지정
    숫자 이므로 setInt 사용

    pstmt.executeUpdate() : Statement를 통해 준비된 SQL 커넥션을 통해 실제 데이터베이스에 전달한다.
    executeUpdate() 은 int를 반환하는데 영향받은 DB row 수를 반환한다.
    여기서 하나의 row 를 등록했기 때문에 1을 반환한다.


executeUpdate()

int executeUpdate() throws SQLException;
  1. 리소스 정리
    쿼리를 실행하고 나면 리소스를 정리해야 한다.

    여기서는 Connection , PreparedStatement 를 사용했다

    리소스를 정리할 때는 항상 역순으로 해야한다.

    Connection을 먼저 획득하고 Connection 을 통해 PreparedStatement 를 만들었기 때문에 리소스를 반환할 때는 PreparedStatement 를 먼저 종료하고, 그 다음에 Connection 을 종료하면 된다.

    참고로 여기서 사용하지 않은 ResultSet은 결과를 조회할 때 사용한다.

    주의
    리소스 정리는 꼭 해주어야 한다.
    예외가 발생하든 하지 않든 항상 수행되어야 하므로 finally 구문에 주의해서 작성해야 함
    이 부분을 놓치게 되면 커넥션이 끊어지지 않고 계속 유지되는 문제가 될 수 있다.
    이린것을 리소스 누수 라고 하는데 결과적으로는 커넥션 부족으로 장애가 발생한다.

    참고
    PreparedStatementStatement 의 자식 타입인데, ? 를 통한 파라미터 바인딩을 가능하게 해준다. 참고로 SQL Injection 공격을 예방하려면 PreparedStatement 를 통한 파라미터 바인딩 방식을 사용해야 한다

    <출처>

    스프링 DB 1편 - 데이터 접근 핵심 원리

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-db-1/dashboard

profile
"한 명이 걷는 천 걸음 보다 천 명이 함께 걷는 한 걸음이 성공의 시작이고 완성이다"

0개의 댓글