연계서비스 개발중에..
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 로 변환해서 소켓으로 리턴하면 끝!