2011-12-09 4 views
1

MySQL을 통해 Spring & Hibernate를 사용하는 설치가 있습니다. 전화를 걸고 싶은 MySQL 저장 절차가 있습니다. 이 프로 시저에서는 2 개의 float 인수를 사용하고 3 개의 필드가있는 결과 집합을 반환합니다. Integer, Integer, Float.결과를 파싱하는 Spring의 저장 프로 시저

나는 봄의 StoredProcedure를 확장하는 클래스를 만들었다. 이것은 실행 기능입니다 :

public Map execute(float longitude, float latiude) { 
Map inparams = new HashMap(2); 
inparams.put("longitude", (float) longitude); 
inparams.put("latitude", (float) latiude); 
Map out = execute(inparams); 

문제는 내가지도 결과를 분석하는 방법을 모른다는 것이다. 디버깅 할 때 모든 결과 집합이 거기에 있지만 이상한 방식으로 정렬되어있는 것을 볼 수 있으며 필드를 추출하는 방법을 모르겠습니다.

나는 그것이 보이는 당신에게 아웃 (지도)의 있으며, toString()를 제공하는 것이 얼마나 그것이 여기 당신을 보여주기 위해 할 수있는 최선 :

은 {# 결과는-설정 1 = [{ {id = 4, out1 = 100, 거리 = 40.9}, {id = 5, out1 = 100, 거리 = 47.7}, {id = 6, out1 = 100, 거리 = 22.3}, {id = 7, out1 = 100 , {id = 9, out1 = 100, 거리 = 18.3}, {id = 10, out1 = 100, distance = 20.1}, # 업데이트 횟수 = 1 = 0}

{id = 11, out1 = 100, 거리 = 28.6} {id = 12, out1 = 100, 거리 = 23.1}

답변

3

디버거에서 유형을 확인합니다. IntelliJ는 쉽게이 사실을 알 수있었습니다.

나에게 Map<String, Object>처럼 보입니다. 키는 "# result-set-1"및 "# update-count-1"입니다.

첫 번째 키의 값은지도 목록으로 반환되는 행당 하나의지도입니다. 키는 열 이름이고 값은 리턴 값입니다.

두 번째 키의 값은 정수입니다. SELECT를했기 때문에 0입니다.

그래서, 맞춤법의 이익, 여기 (초기 코딩 오류에 대한 죄송) 결과 추출하는 방법은 다음과 같습니다

이 이
// Foo is some unknown object that encapsulates each row. 
List<Foo> results = new ArrayList<Foo>(); 
Map<String, Object> rows = (Map<String, Object>) out.get("#result-set-1"); 
for (Map row : rows) { 
    int id = row.get("id"); 
    int out1 = row.get("out1"); 
    double distance = row.get("distance"); 
    results.add(new Foo(id, out1, distance)); 
} 
return results; 
그것은 컴파일되지 않습니다
+0

가, 사실은 내가 정말 무엇을 이해하지 못하는 당신 for 문에서 뭐하는거야?이게 뭐야? "지도 행 : out.get ..." – stdcall

+0

죄송합니다, 그 시간에 너무 안개가났습니다. 나는 이것이 정확하다고 생각한다. 아이디어는 결과 맵에서 행 목록을 가져 와서 해당 맵 컬렉션을 반복하는 것이 었습니다. 낱말은 정확하다; 코드가 잘못되었습니다. – duffymo

+0

훨씬 나아 보인다. 감사합니다 – stdcall