JDBC Template
JDBC 절차 중 반복적으로 쓰이는 구문들을 각각의 메소드로 정의해둔 클래스
- 재사용할 목적으로 작성, 공통 템플릿 작업 진행시 사용
- 해당 클래스의 모든 메소드는 static메소드임
<MVC패턴의 JDBC 절차 중 반복되는 구문>
1. DB와 접속된 CONNECTION객체를 생성 후 반환하는 구문
(Class.forName(), DriverManager.getConnection() )
2. 전달받은 Connection객체를 가지고 트랜젝션 처리를 해주는 메소드
(conn.commit(), conn.rollback() )
3. 전달받은 JDBC용 객체를 반납시켜주는 메소드 (각 객체별로)
( conn.close(), stmt.close(), pstmt.close(), rset.close() )
* 싱글톤 패턴: 메모리영역에 단 한 번만 올라간 것을 재사용한 개념
//1. DB와 접속된 CONNECTION객체를 생성 후 반환해주는 메소드
public static Connection getConnection() {
// Connection 객체를 담을 변수
Connection conn = null;
// 1,2 : 드라이버 등록 및 연결
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","JDBC", "JDBC");
conn.setAutoCommit(false);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
// * 2. 전달받은 Connection객체를 가지고 트랜젝션 처리를 해주는 메소드
// 2-1 전달받은 Connection객체로 Commit
public static void commit(Connection conn) {
try {
if (conn != null && !conn.isClosed())
// Connection클래스 isClose커넥션이 닫혀있으면 t, 열려있으면 f
// connection 이 null이 아니고 connection 객체가 열려있으면
conn.commit();
} catch (SQLException e) {
e.printStackTrace();
}
}
// 2-1 전달받은 Connection객체로 Rollback
public static void rollback(Connection conn) {
try {
if (conn != null && !conn.isClosed()) {
conn.rollback();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
// 3. 전달받은 JDBC용 객체를 반납시켜주는 메소드 (각 객체별로)
// 3-1 전달받은 Connection객체를 반납하는 메소드
public static void close(Connection conn) {
try {
if (conn !=null && !conn.isClosed()) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
// 3-2 전달받은 Statement객체를 반납하는 메소드 -- 오버로딩 적용하기 (같은 이름, 다른 매개변수 자료형)
// 다형성이 적용되어 PreparedStatement는 해당 메소드를 상속받아 사용 가능, 재정의 필요없음
public static void close(Statement stmt) {
try {
if (stmt !=null && !stmt.isClosed()) {
stmt.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
// 3-2 전달받은 Resultset객체를 반납하는 메소드 -- 오버로딩 적용하기 (같은 이름, 다른 매개변수 자료형)
public static void close(ResultSet rset) {
try {
if(rset !=null && !rset.isClosed()) {
rset.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
'기타' 카테고리의 다른 글
JSP Action Tag : JSP 표준 액션태그 (0) | 2022.12.14 |
---|---|
[jsp] EL구분(Expression Language)란? (0) | 2022.12.14 |
자바빈(Java Bean)이란? / 생성 및 사용법 / 자바빈을 사용하는 이유 (0) | 2022.12.14 |
[JDBC] JDBC 실행 중 Statement와 PreparedStatement 차이 (0) | 2022.10.13 |
[JDBC] JDBC란? / JDBC 사용객체 / JDBC 처리, 동작순서 (1) | 2022.10.05 |