2016-07-01 47 views
0

我有一個查詢,它提供了以下的輸出:如何在JDBC模板實現的RowMapper

State CST QTY 
aa  0 10 
aa  1 20 
aa  2 30 
aa  3 40 
ac  0 10 
ac  1 20 
ac  2 30 
ac  3 40 

我使用與JDBC模板Spring MVC的:儘管實現的RowMapper我越來越糊塗,其數據結構需要使用和如何映射每一行以獲得以下輸出以下預期O/P:

STATE CST0 CST CST2 CST3 
aa  10 20 30 40 
ac  10 20 30 40 

任何人都可以幫助我嗎?

+0

這是一個表支點的問題,你可以在SQL查詢中做到這一點。 – Blank

+0

沒有改變查詢它不可能? – ASR

+0

如果你堅持使用'RowMapper',那麼不應該這樣......但爲什麼要根據需要使它更加複雜,數據庫能夠做到這一點,並且可能更有效地將大量數據傳輸到Java應用程序並將其轉換你的申請。 –

回答

0

我已經使用以下代碼段用於我的要求:

List<Map<String, Object>> resultMapList= new ArrayList<Map<String, Object>>(); 

     Map<String, List<Map<String, Integer>>> listMap= new TreeMap<String, List<Map<String, Integer>>>(); 

     for(Map<String, Object> mapList:resultMapList){ 
      List< Map<String, Integer>> ListMapPair= new ArrayList<Map<String, Integer>>(); 
      Map<String, Integer> entry= new HashMap<String, Integer>(); 
     } 

     Map<String, List<Object>> m= new HashMap<String, List<Object>>(); 

     List<Object> list= new ArrayList<Object>(); 
     list.add(1); 
     list.add(2); 
     list.add(3); 
     m.put("a", list); 

     List<Object> list1= new ArrayList<Object>(); 
     list1.add(4); 
     list1.add(5); 
     list1.add(6); 
     m.put("b", list1); 

     m.put("c", list); 

     System.out.println(m); 

輸出會是這樣:

{A = [1,2,3],B = [4,5,6] ,c = [1,2,3]}

1

如果您使用Google Guava庫,則可以使用名爲Multimap的新集合。多映射從唯一鍵映射到值集合:Map<K, List<V>>Map<K, Set<V>>

而不是使用一個RowMapper的,我寧願使用接口RowCallbackHandler這對於處理結果集類似的界面:

public class MyRowMapper implements RowCallbackHandler{ 

    private Multimap<String, Integer> stateByQuantity = new ArrayListMultimap(); 

    void processRow(ResultSet rs) throws SQLException { 
     String state = rs.getString("State"); 
     Integer qty = rs.getInt("QTY"); 
     stateByQuantity.put(state, qty);   
    } 
}