2013-07-18 2 views
0

Я пытаюсь запросить набор и вернуть его как объект хэш-карты с помощью Spring JdbcTemplate. Но по некоторым причинам я получаю пустой набор результатов с сервера. Возможно, у меня есть проблема в общей конфигурации, но остальные запросы работают без проблем.Пусто ResultSet из запроса

Это, как я запрос

public Map<Integer, String> getCompanyDataservers() { 
    return getTemplate().queryForObject("select id, dataserver from company", new RowMapper<Map<Integer,String>>() { 
     @Override 
     public Map<Integer, String> mapRow(ResultSet rs, int rowNum) 
       throws SQLException { 
      HashMap<Integer, String> toReturn = new HashMap<Integer, String>(); 
      while(rs.next()) { 
       int id = rs.getInt("id"); 
       toReturn.put(id, dataserver); 
      } 
      return toReturn; 
     }}); 
} 

После некоторой отладки и лесозаготовительного заявления я сделал вывод, что мой ResultSet кажется пустыми ни строки. Когда я запрашиваю то же самое («select id, dataserver from company») вручную непосредственно из БД, я получаю желаемый результат. Тем не менее, я получаю набор результатов с 0 строками.

Одна из моих теорий заключается в том, что невозможно получить такой тип набора при запросе объекта таким образом. Но нет ли возможности быть свободным в ваших запросах и строить более сложный объект в качестве результата запроса, или мне нужно создать специально построенный класс, который будет использоваться «queryForList», чтобы получить нужные данные и преобразовать их впоследствии?

Или я просто что-то пропустил?

ответ

2

Вы не должны вызывать rs.next() внутри mapRow. JdbcTemplate будет вызывать mapRow для вас для каждой строки в результирующем

Все, что вам нужно сделать на mapRow просто возвращает HashMap, которые представляют один одну строку базы данных, весна будет делать Resultset итерацию для вас

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