2Bbear's knowledge workshop

이 포스팅은

스프링 프로젝트, 오라클 DB를 이용하여 만들어집니다.


MySQL이나 다른 DB는 안쓰니 다른 정보를 검색해주세요.


추가로 마이바티스도 안쓰고 작성하는 겁니다. 마이바티스를 쓰는 걸 보고 싶으신 분은 구글에 검색해 보시면 됩니다.


============================================================

1. 이클립스로 스프링 프로젝트를 만듭니다

레그씨 프로직트를 만듭니다.


이후 MVC 형태의 스프링 프로젝트를 선택해주고


간단하게 패키지 명을 정해줍니다. 보통 com.company.자신이 원하는 이름

이런 식으로 만든다고 하네요


만들고 잠시 관련 라이브러리를 설치하는 것을 기다려 줍니다.



2. 오라클 jdbc 라이브러리를 가져옵시다.

C:\app\오라클 설치한 사용자 계정\product\11.2.0\dbhome_1\jdbc\lib
보통 이 경로상에 있으니 찾아보시면 됩니다


그 후 이렇게 이클립스 라이브러리에 추가해줍니다.


3. DB 연결을 위한 class를 만들어 줍니다.

package com.company.db;
import java.sql.*;
public class DBConnection {
public static Connection dbConn;
public static Connection getConnection() {
Connection conn=null;
try {
String user="scott";
String pw="0000";
String url="jdbc:oracle:thin:@localhost:1521:orcl";
Class.forName("oracle.jdbc.driver.OracleDriver");
conn=DriverManager.getConnection(url, user, pw);
System.out.println("Database에 연결되었습니다. \n");
}catch (ClassNotFoundException cnfe) {
System.out.println("DB 드라이버 로딩 실패 :"+cnfe.toString());
} catch (SQLException sqle) {
System.out.println("DB 접속실패 : "+sqle.toString());
} catch (Exception e) {
System.out.println("Unkonwn error");
e.printStackTrace();
}
return conn;
}
}



4. 만들어진 스프링 HomeController에 이 클래스를 이용하여 코드를 작성합니다

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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
package com.company.jjh;
 
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.Vector;
 
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
 
import com.company.db.DBConnection;
import com.company.jjh.*;
 
/**
 * Handles requests for the application home page.
 */
@Controller
public class HomeController {
    
    //
    //byte로 처리
    private int callCount=0;
    //
    private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
    
    @RequestMapping(value = "/", method = RequestMethod.GET)
    public void home(HttpServletRequest request,HttpServletResponse response) throws IOException {
        System.out.println("test : 누가 root에 접속했습니다");
        
        
        response.getWriter().append("test Served at: ").append(request.getContextPath());
        
 
        
        System.out.println(response);
    }
    
    @RequestMapping(value = "/Login", method = RequestMethod.GET)
    public void Process_LogIn(HttpServletRequest request,HttpServletResponse response) throws IOException {
        System.out.println("test: 누가 login에 접속했습니다");
        response.getWriter().append("test Served at Login: ");
    }
    @RequestMapping(value = "/TestDB/getEmpTable", method = RequestMethod.GET)
    public void Process_TestDBGetEmpTable(HttpServletRequest request,HttpServletResponse response) throws IOException {
        System.out.println("test: DB test GetEmpTalbe이 실행되었습니다");
        response.getWriter().append("call count="+callCount+" test Served at TestDBGetEmpTable: ");
        for(String t : CallDBConnection() )
        {
            response.getWriter().append("<p>"+t+"</p>");
        }
        callCount++;
    }
    Vector<String> CallDBConnection() {
        Connection conn = null// DB연결된 상태(세션)을 담은 객체
        PreparedStatement pstm = null;  // SQL 문을 나타내는 객체
        ResultSet rs = null;  // 쿼리문을 날린것에 대한 반환값을 담을 객체
        Vector<String> function_result=new Vector<String>();
        try {
            // SQL 문장을 만들고 만약 문장이 질의어(SELECT문)라면
            // 그 결과를 담을 ResulSet 객체를 준비한 후 실행시킨다.
            String quary = "SELECT * FROM EMP";
            
            conn = DBConnection.getConnection();
            pstm = conn.prepareStatement(quary);
            rs = pstm.executeQuery();
            
            /*  EMP 테이블의 데이터 타입
             * 
                EMPNO NOT NULL NUMBER(4) -- int
                ENAME VARCHAR2(10) -- String
                JOB VARCHAR2(9) -- String
                MGR NUMBER(4) -- int
                HIREDATE DATE -- Date
                SAL NUMBER(7,2) -- float/double
                COMM NUMBER(7,2) -- float/double
                DEPTNO NUMBER(2) -- int
            */
            
            System.out.println("EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO");
            System.out.println("============================================");
            
            while(rs.next()){
                int empno = rs.getInt(1);
                //int empno = rs.getInt("empno"); 숫자 대신 컬럼 이름을 적어도 된다.
                String ename = rs.getString(2);
                String job = rs.getString(3);
                int mgr = rs.getInt(4);
                java.sql.Date hiredate = rs.getDate(5); // Date 타입 처리
                int sal = rs.getInt(6);
                int comm = rs.getInt(7);
                int deptno = rs.getInt(8);
                
                String result = empno+" "+ename+" "+job+" "+mgr+" "+hiredate+" "+sal+" "+comm+" "+deptno;
                System.out.println(result);
                function_result.add(result);
            }
            
            
        } catch (SQLException sqle) {
            System.out.println("SELECT문에서 예외 발생");
            sqle.printStackTrace();
            
        }finally{
            // DB 연결을 종료한다.
            try{
                if ( rs != null ){rs.close();}   
                if ( pstm != null ){pstm.close();}   
                if ( conn != null ){conn.close(); }
            }catch(Exception e){
                throw new RuntimeException(e.getMessage());
            }
            
        }
        return function_result;
 
    }
    
}
 
cs



5. 테스트 해봅시다 저는 C++로 respone 받은 데이터를 출력 시켜볼껍니다.


DB에서 잘 받아오는 것을 확인 할 수 있습니다.