2014-12-03 5 views
1

У меня возникла ситуация, когда мне нужно выполнить несколько запросов внутри одного и того же оператора. Я отлично справлялся с Java, но теперь я пытаюсь переключиться на Spring и создать лучшее приложение. Во всяком случае, у меня есть что-то вроде этого:Spring 4.1 JdbcTemplate Multiple ResultSet's

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

Я бы не использовал инструкцию SQL с несколькими результатами при использовании JDBCTemplates. Вместо этого запустите транзакцию и вызовите 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

вы можете сделать союз. выберите * из tab1 union select * from tab2. не уверен, что это работает с вашей текущей базой данных. –

+0

Это именно то, как работает эта конкретная поисковая система, она возвращает несколько наборов записей, и это что-то вне моего контроля. У меня есть класс, который возвращает данные в формат JSON для меня, но я надеялся преобразовать его в Spring для более чистого и удобного подхода. –

Смежные вопросы