8. 스프링 웹 어플리케이션 서비스에 request하면 db에 접속하는 기능을 만들자
중단한 프로젝트/WebServerGameProject(Team)2019. 1. 30. 14:32
이 포스팅은
스프링 프로젝트, 오라클 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에서 잘 받아오는 것을 확인 할 수 있습니다.
'중단한 프로젝트 > WebServerGameProject(Team)' 카테고리의 다른 글
9. 서버 어플리케이션 서비스에 DBConnectionPool을 만들자 (0) | 2019.01.30 |
---|---|
7. rest SDK를 이용하여 request해서 respon 된 값 출력하기 (0) | 2019.01.29 |
6. cpprest , rest 라이브러리로 C++로 http 통신 구하기 (0) | 2019.01.29 |
5. Boost asio를 이용한 네트워크 통신 만들어보기 (0) | 2019.01.28 |
4. c++로 webservice에 연결하는 방법 (0) | 2019.01.24 |