이제 본격적으로 JDBC를 사용해서 애플리케이션을 개발해봅시다.

JDBC를 사용해서 회원( Member ) 데이터를 데이터베이스에 관리하는 기능을 개발하겠습니다.

데이터 초기화

먼저 sql을 직접 H2에 날려서 member 테이블을 미리 만들어두겠습니다.

drop table member if exists cascade;
create table member (
    member_id varchar(10),
    money integer not null default 0,
    primary key (member_id)
);

image.png

Member

@Data
public class Member {

    private String memberId;
    private int money;

    public Member() {
    }

    public Member(String memberId, int money) {
        this.memberId = memberId;
        this.money = money;
    }
    
}

회원의 ID와 해당 회원이 소지한 금액을 표현하는 단순한 클래스입니다.

member 테이블에 데이터를 저 장하고 조회할 때 사용합니다.

MemberRepositoryV0 - 회원 등록

JDBC를 사용해서 이렇게 만든 회원 객체를 데이터베이스에 저장해보겠습니다. JDBC의 DriverManager를 사용해서 저장할 것입니다.

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

/**
 * JDBC - DriverManager 사용
 */
@Slf4j
public class MemberRepositoryV0 {

    public Member save(Member member) throws SQLException {
		    //...2
        String sql = "insert into member(member_id, money) values(?, ?)";
        
        Connection con = null;
        //...3
        PreparedStatement pstmt = null;
        
        try {
            con = getConnection(); //...1
            pstmt = con.prepareStatement(sql); //...4
            //...5
            pstmt.setString(1, member.getMemberId());
            pstmt.setInt(2, member.getMoney());
            //...6
            pstmt.executeUpdate();
            return member;
        } catch (SQLException e) {
            log.error("db error", e);
            throw e;
        } finally {
		        //...7
            close(con, pstmt, null);
        }
    }

	  //...8, 9
    private void close(Connection con, Statement stmt, ResultSet rs) {
        if (rs != null) {
            try {
                rs.close();
            } catch (SQLException e) {
                log.info("error", e);
            }
        }
        if (stmt != null) {
            try {
                stmt.close();
            } catch (SQLException e) {
                log.info("error", e);
            }
        }
        if (con != null) {
            try {
                con.close();
            } catch (SQLException e) {
                log.info("error", e);
            }
        }
    }

    private Connection getConnection() {
        return DBConnectionUtil.getConnection();
    }
    
}
  1. getConnection()