연계서비스 개발중에..

Client 쪽에서 XML 타입의 문자열을 보내주면 Map 으로 변환해서(XMLEncoder 이용)

내가 Map 안에 쿼리문과 파라미터를 받아서 Query 실행 후에 데이터를 다시 XML 타입으로 변환해서(XMLDecoder)

 보내줘야하는 거 만드는 중인데..


Map 까서 일일이 Client 와 Key 값 정의해서 Value 빼와서 세팅하기가 번거러운거 같아서 구글링!

Iterator() 로 이게 가능하다는걸 암! 잊어버릴까봐 남긴다.


일단 Client 에서 보내주는 Map 의 양식은 다음과 같다.

Key : "sql", Value(String) : "SELECT * FROM WHERE PARAM1 = ?, PARAM2 = ? PARAM3 = ?"

Key : "params" Value(Map) :

Key : PARAM1, Value: 값

Key : PARAM2, Value: 값

Key : PARAM3, Value: 값


* 우선 PrepareStatement 를 쓸것이고, Params 의 갯수는 모른다. 항상 같은 쿼리문이 들어오는 것이 아니라,(총 연계 3부분)

   연계마다 따로 서비스를 개발하면 일일이 Key 값을 넣어서 코딩하면 되겟지만.. 싫다.


여기서 부터 구현

// Class.forName, DriverManager.getConnection 은 생략한다.

// Client 에서 Map 이 "paramMap" 으로 온다고 가정

// 두개의 키값, "sql", "params" 는 변함이 없다.


String sql = String.valueof(paramMap.get("sql"));

HashMap<String, Object> sqlMap = (HashMap<String, Object>) paramMap.get("params");


Set<String> key = sqlMap.keySet();

int paramIndex = 1;


for( Iterator<String> iterator = key.iterator(); iterator.hasNext(); ) {

String paramsKey = String.valueOf(iterator.next());

String paramsVal = String.valueOf(sqlMap.get(paramsKey));

// sql Query 에 값 넣기

stmt.setString(paramIndex, paramsVal);

paramIndex++;

}


요렇게 하면, 자동으로 index 증가하면서 params 입력

주의점 : sql Query 입력해야 할 ? 의 순서와 갯수가, params 에 담겨있는 순서&갯수 가 같아야한다.

이건 구지 얘기안해도 알아야 될 것;;


이렇게 데이타 조회해서 Map 으로만든 다음 다시 -> XMLDecoder 로 변환해서 소켓으로 리턴하면 끝!


'공부 > JAVA' 카테고리의 다른 글

JAVA_[Thread start() & run()]  (0) 2015.02.06
JAVA_[ 리눅스 권한변경 ]  (0) 2014.12.26
JAVA_[ EJB란? ]  (0) 2014.11.05
JAVA_[ Dynamic Web Project 에서 Tomcat(Catalina) Home 경로 얻기 ]  (1) 2014.11.04
JAVA_[ transient ]  (0) 2014.10.31

+ Recent posts