본문 바로가기
프로그램/JAVA

[ Servlet ] JDBC를 이용한 MySql 연동 (두번째)

by 구서기 2014. 8. 11.

 

[Java] ... (첫번째) 에서 작성한 MySql 컨넥션 클래스를 사용하여 Servlet를 작성해 보았다.

아래 작성한 Servlet 을  플렉스(FLEX)에서 호출하는 방법은 다음 (세번째) ... HTML에서 호출해서 사용하는 방법은 ... 생략 ^^

HmysqlServlet.java 소스
package drv; 
/**
 * 모듈이름		HTTP로 요구하는 곳에 값을 보내주는 서블릿
 * 작성일자		2014. 07. 21
 * 작성자명		Hwang Kyuseok 
 * 
 *   [리턴결과 JSON 형식으로]
 *   Select 에대한 결과
 *   { 	"h_ret":[{"필드명1":"데이터1"},  {"필드명2":"데이터2"}, ...   ] } 여러개의 레코드
 *        
 *   Insert,Update,Delete 에대한 결과 
 *   {"h_ret":[{"return":"결과값"}]}  한개의 레코드
 *   
 * */
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;
import java.util.ArrayList;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.json.simple.JSONArray;
import org.json.simple.JSONObject;

import drv.Hmysqlconnect.Hmysqlconnect_ret;
/**
 * Servlet implementation class HmysqlServlet
 */
@WebServlet("/HmysqlServlet")
public class HmysqlServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public HmysqlServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	@SuppressWarnings("unchecked")
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

		int i,col,icnt;
		request.setCharacterEncoding("UTF-8");	//POST 방식의 한글처리
		response.setContentType("text/html; charset=UTF-8");
		PrintWriter out = response.getWriter();
		
		//읽어온 파라메터
		String stmp = request.getParameter("pam");
		String[] pam = stmp.split(",");	/*DBip, port, dbname, user,pass*/
		String[] strSql = request.getParameterValues("strSql");

		//DB컨넥션 객체생성		
		Hmysqlconnect hdb = new Hmysqlconnect(pam[0],pam[1],pam[2],pam[3],pam[4]); 
		
		//json객체생성
		JSONObject responseDetailsJson = new JSONObject();
		JSONArray jsonArray = new JSONArray();
		//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

		//쿼리문 Select인지 체크하기위해
		stmp = strSql[0].substring(0,1); 
		//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
		//대.소문자 구분없이 S 로시작되면 Select 쿼리문
		//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
		if( stmp.equalsIgnoreCase("S") ) { 
			ArrayList<Hmysqlconnect_ret> al = new ArrayList<Hmysqlconnect_ret>();	//리턴 배열선언
			al = hdb.fn_ExecuteS(strSql[0]);	//select 쿼리문 날림
			icnt = al.size();//레코드갯수
			if(icnt > 0) {
				for(i=0;i<icnt;i++) {		//레코드 갯수만큼
					JSONObject formDetailsJson = new JSONObject();
					for(col=0;col<((String[])al.get(0).s[0]).length ;col++) {	//필드(열)갯수만큼
						   formDetailsJson.put( ((String[])al.get(i).s[0])[col] ,  ((String[])al.get(i).s[1])[col] ); //필드명,데이터
					}
					jsonArray.add(formDetailsJson);
				}
			}
		}
		//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
		//아니면 Insert, Update, Delete 쿼리문
		//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
		else {	
			try {
				JSONObject formDetailsJson = new JSONObject();
				i = hdb.fn_ExecuteU2(strSql); //쿼리문실해
				formDetailsJson.put("hvalue", String.valueOf(i)); // {hvalue:"결과값"} 0보다작으면 오류 ,
				jsonArray.add(formDetailsJson);
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
		responseDetailsJson.put("h_ret", jsonArray);
	    out.print(responseDetailsJson);
	    out.flush();
	    out.close();
	}
}

 

JSON
※ 문자열 통신을 위해 java 의 JSON  라이브러리로   json-simple-1.1.1.jar 을 사용함

    배포싸이트는 : https://code.google.com/p/json-simple/

    이클립스에 설치는 ... 결과만