이제 본격적으로 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)
);
@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 테이블에 데이터를 저 장하고 조회할 때 사용합니다.
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();
}
}