2014-12-03 73 views
1

我有一個情況我需要在同一語句中執行多個查詢。我在Java上做得很好,但現在我正在嘗試切換到Spring並構建一個更好的應用程序。無論如何,我有這樣的事情:春季4.1的JdbcTemplate多個ResultSet的

select * from table;select * from table2; 

上面的代碼是一個示例,我不是真的查詢這樣的2個表。第三方應用程序,我使用返回多個記錄集上的索引等面搜索和元數據......總之,一個標準的Java類,我能夠做到以下幾點:

 PreparedStatement ps = connect.prepareStatement(sql).execute(); 

     do { 
      ResultSet rs = ps.getResultSet(); 
      ResultSetMetaData md = rs.getMetaData(); 
      int columns = md.getColumnCount(); 
      @SuppressWarnings("rawtypes") 
      ArrayList list = new ArrayList(); 
      while (rs.next()) { 
       Map row = new LinkedHashMap<String, String>(); 
       for (int i=1; i <=columns; ++i) { 
        row.put(md.getColumnName(i), rs.getObject(i)); 
        // append to our string builder the unique id for each record found 
        if(cnt == 1) { 
         if(md.getColumnName(i).equalsIgnoreCase("id")){ 
          id_list.append(rs.getObject(i) + ","); 
         } 
         if(md.getColumnName(i).equalsIgnoreCase("part_number")){ 
          suggest.append(rs.getObject(i) + "|"); 
         } 
        } 
       } 
       list.add(row); 
      } 
      result.put(label, list); 
     } while (ps.getMoreResults()); 

我修剪下來爲了簡潔起見,留下足夠的視覺代碼。我是能夠運行與JdbcTemplate.query(SQL,RowMapper的)單一的查詢和印象深刻的結果。

如果任何人都可以提供一些指導,告訴我什麼工作我真的很感激。

回答

0

使用JDBCTemplates的時候,我不會利用多結果的SQL語句。相反,啓動一個事務並多次調用template.query(...)以準確找到要檢索的內容。通過嘗試將所有SQL推送到對數據庫的單個請求中,您獲得的收益非常小。

@Tranactional 
public void retrieveStuff(List<Stuff> stuffList) { 
    List<StuffResult> results = new ArrayList<StuffResult>(stuffList.size()); 
    for(Stuff stuff : stuffList) { 
    results.add(jdbcTemplate.queryForObject(sql, getSQLParameters(stuff), StuffResult.class)); 
    } 
    return results; 
} 
+0

,你可以做工會。從tab2中選擇* from tab1 union select *。不知道這是否適用於您當前的數據庫。 – 2014-12-04 00:38:24

+0

這就是這個特定的搜索引擎是如何工作的,它返回多個記錄集,這是我無法控制的東西。我有一個返回的數據轉換成JSON格式對我來說一類,但我希望將其轉換爲春季爲更清潔,更易於維護的方法。 – 2014-12-04 12:43:45