Jsp-MVC2-JdbcUtil

2020. 8. 10. 20:05JSP-MVC model2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
package db;
 
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
 
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
 
//JDBC 관련 작업 처리 기능을 제공하는 클래스
//모든 메서드를 인스턴스 생성없이 호출 가능하도록 static 으로 선언
public class JdbcUtil {
    //JDBC 연결 후 Connection 객체를 리턴하는 getConnection()메서드 정의
    public static Connection getConnection() {
        Connection con=null;
        try {
            //톰캣 컨텍스트 객체 가져오기
            Context initCtx=new InitialContext();
            
            //---------------------------------------------------------
            //context.xml 내의 <Resource> 태그 부분 가져오기
//            Context envCtx=(Context)initCtx.lookup("java:comp/env");
            
            //context.xml 내의 지정된 name 속성항목을 찾아 DataSource 객체(커넥션 풀) 반환
//            DataSource ds= (DataSource)envCtx.lookup("jdbc/MySQL");
            //----------------------------------------------------------
            
            
            //위의 lookup() 메서드 호출을 하나로 결합할 경우
            DataSource ds= (DataSource)initCtx.lookup("java:comp/env/jdbc/MySQL");
            
            //커넥션 풀로 부터 Connection 객체 가져오기
            con=ds.getConnection();//context.xml 내에 username, password 입력시
//            con=ds.getConnection("root","1234");//context.xml 내에 username, password  미 입력시
            
            //DB의 트랜잭션 처리를 위해 Autto Commit 기능 해제
            //-> 작업 성공 시 commit(), 실패 시 rollback() 메서드 수동으로 호출해야함.
            con.setAutoCommit(false);
        } catch (NamingException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        
        
        return con;
    }
    
    //----------------------메서드오버로딩을 통한 close() 메서드 정의-------------------
    
    // 사용한 Connection 객체를 반환하기 위한 close() 메서드 정의
    public static void close(Connection con) {
        if(con != null)try {con.close();} catch(Exception e) {};
    }
    
    // 사용한 PreparedStatement 객체를 반환하기 위한 close() 메서드 정의
        public static void close(PreparedStatement pstmt) {
            if(pstmt != null)try {pstmt.close();} catch(Exception e) {};
        }
        
    // 사용한 ResultSet 객체를 반환하기 위한 close() 메서드 정의
        public static void close(ResultSet rs) {
            if(rs != null)try {rs.close();} catch(Exception e) {};
        }
        
        //---------------------------------------------------------------------
    
    // DB 조작 완료 후 commit() 메서드 호출을 위한 commit() 메서드 정의
    //-> 트랜잭션 처리를 위해 Auto Commit 기능을 해제 했을 때 필요
        public static void commit(Connection con) {
            try {
                con.commit();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        
    // DB 조작 실패 후 rollback() 메서드 호출을 위한 rollback() 메서드 정의
    //-> 트랜잭션 처리를 위해 Auto Commit 기능을 해제 했을 때 필요
            public static void rollback(Connection con) {
                try {
                    con.rollback();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
    
    
}
 
cs

 

DAO에서 Connection을 불러다 쓰게 만들어 주기 위해서 jdbc를 다루기 위한 클래스를 만들어 준다. 모든 메서드들을 인스턴스 생성 없이 효율적으로 사용하기 위해서 static으로 선언을 해주고 다른 패키지에선 클래스명만 적어서 사용 가능하게 만들어 준다. Context.xml을 불러다 쓰기 위해 Context 객체를 선언해주고 Datasource 객체도 선언해서 Context.xml의 name 값과 주소로 접근을 해서  Connection 하나를 받아 온다. 그리고 Auto Commit기능이 있는데 작업이 중간에 하나가 실패해도 자동으로 저장을 해버리기 때문에 어디서 예외가 발생했는지 알기 위해 false 값을 줘서 기능을 멈춰주고 밑에서 따로 commit과 rollback 메서드를 정의해서 필요한 곳에서 commit과 rollback을 다루기 쉽게 따로따로 정의해 둔다.

'JSP-MVC model2' 카테고리의 다른 글

Jsp-MVC2- ProService  (0) 2020.08.10
Jsp-MVC2-WriteProAction  (0) 2020.08.10
Jsp-MVC2 -DAO  (0) 2020.08.10
Jsp -MVC2- Action,ActionForward  (0) 2020.08.10
Jsp-MVC2-FrontController  (0) 2020.08.10