2011-12-09 11 views
1

私は、Springで&Hibernate over MySQLを使用した設定があります。 私はMySQL Stored-Procedureを呼び出しました。 このプロシージャは2つのfloat引数をとり、3つのフィールドを持つ結果セットを返します。整数、整数、フロート春のストアドプロシージャ、結果を解析する

私は春の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、distance = 40.9}、{id = 5、out1 = 100, 距離= 47.7}、{id = 6、out1 = 100、距離= 22.3}、{id = 7、out1 = 100 {id = 10、out1 = 100、distance = 20.1}、{id = 9、out1 = 100、 、distance = 18.3}、{id = 8、out1 = 100、distance = 22.1} #update-count-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"です。

最初のキーの値はマップのリストで、1行につき1つのマップが返されます。キーは列名であり、値は戻り値です。

2番目のキーの値は整数です。あなたがSELECTをしたのでゼロです。

だから、それを綴るの利益のために、ここでは(最初のコーディングエラーのために申し訳ありません)検索結果を抽出する方法は次のとおりです。

// 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

関連する問題