게시판 만들기 연습
Oracle
Java
- BoardView - 메뉴 화면 작성
- BoardService - 비즈니스로직 처리 (데이터 가공/트랜잭션 제어)
- BoardDAO - 실질적으로 DB에 접근
- JDBCTemplate - 반복 사용되는 요소 저장
JDBCTemplate
- DB 연결, JDBC 자원 반환 등 JDBC 관련 공통 내용들을 모아놓은 클래스
- 여기에 만들 메서드
1. Connection 객체 생성 및 반환
2. 전달 받은 JDBC 객체 자원 반환 ( Close() 메서드 )
3. 트랜잭션 제어 구문 ( commit , rollback )
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class JDBCTemplate {
// 객체 생성을 하지 않아도 되는 변수
// 단, 외부로 부터 직접 접근은 차단
private static Connection conn = null;
// DB 연결 정보를 담고 있는 Connection 객체 반환용 메서드
public static Connection getConnection() {
// 이전에 생성된 Connection이 close()되지 않은 경우
// 이전 Connection을 재활용하고
// 이전에 생성된 Connection이 없거나, close() 되었을 경우
// 새로운 Connection을 반환
// --> 접속한 사람당 Connection 1개만 가짐
try {
if(conn == null || conn.isClosed()) {
// conn.isClosed() : Connection 객체가 close() 된적 있으면 true;
Class.forName("oracle.jdbc.driver.OracleDriver");
String url = "jdbc:oracle:thin:@localhost:1521:xe";
String userName = "board";
String password = "board1234";
conn = DriverManager.getConnection(url, userName, password);
conn.setAutoCommit(false); // 자동 커밋 기능 off
// 만약 true인 경우 SQL이 수행 되자마자 자동으로 Commit
// (주의사항) conn.close()가 수행되는 경우 자동으로 commit()이 같이 수행된다.
// -> conn.close() 호출 전에 트랜잭션 제어 구문을 작성해야함.
}
}catch(Exception e) {
e.printStackTrace();
}
return conn;
}
// Statement 객체 반환
public static void close(Statement stmt) {
// -> 매개변수에 다형성을 적용하여
// -> Statement,PreparedStatement 두 객체의 close() 동작을 하나의 메서드로 처리 가능
try {
if(stmt != null && !stmt.isClosed()) stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
// ResultSet 반환 메서드
public static void close(ResultSet rs) {
try {
if(rs != null && !rs.isClosed()) rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
// Connection 반환 메서드
public static void close(Connection conn) {
try {
if(conn != null && !conn.isClosed()) conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
// commit용 메서드
public static void commit(Connection conn) {
try {
if(conn != null && !conn.isClosed())
conn.commit();
} catch (SQLException e) {
e.printStackTrace();
}
}
// rollback용 메서드
public static void rollback(Connection conn) {
try {
if(conn != null && !conn.isClosed())
conn.rollback();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
지난번 방식과 다른점
* BoardDAO 클래스 메서드를 작성할때
try-catch-finally 구문에서 catch를 없애고 try-finally 사용
--> BoardView 클래스로 예외를 모두 throws 했기 때문
* 저번에는 BoardDAO 클래스에서 객체 자원을 모두 반환했다면,
이번에는 Connection 객체 자원을 BoardService 클래스에서 반환한다.
--> 트랜잭션제어(commit , rollback)가 끝난 뒤 반환해야하므로
* BoardDAO 클래스에서 Connection을 생성하고 사용했지만,
이번에는 BoardService 클래스에서 생성하고 매개변수로 BoardDAO에 넘겼음
--> 트랜잭션제어에 Connection 객체가 필요하므로 먼저 사용하고 BoardDAO로 보냄
* static 메서드와 필드를 이용해서 JDBCTemplate 클래스의 메서드와 필드를 쉽게 호출
+ JDBCTemplate 클래스 이용하는 다른 클래스에 " import .... .JDBCTemplate.* "를 추가하고
클래스명 없이 메서드만 입력해서 호출하도록 했음.
* JavaDocs 주석 ( 클래스와 메서드 설명용 주석 )을 사용해 메서드나 클래스의 정보 기록
/**
* @param
* @return
* @throws
*/
'Study > 수업 내용 정리' 카테고리의 다른 글
2021-10-15 (0) | 2021.10.15 |
---|---|
JDBC3 < 2021-10-14 > (0) | 2021.10.14 |
JDBC1 < 2021-10-06 > (0) | 2021.10.06 |
Collection - Set / Map < 2021-10-05 > (0) | 2021.10.05 |
Array / Collection - List < 2021-10-04 > (0) | 2021.10.04 |