не могу получить то, что мне нужно из БД - PullRequest
0 голосов
/ 10 мая 2019

У меня есть запрос, который возвращает таблицу. запрос:

SELECT * FROM vote_votes WHERE poll_id=? ORDER BY option_id ASC

например, когда poll_id равен 1, таблица должна быть:

poll_id | option_id | option_text 
------------------------------------- 
1              1         one
1              2         two
.              .          .
.              .          .
.              .          .
1              10        ten

Теперь в моем контроллере отдыха я хочу иметь метод, который возвращает вышеуказанный запрос в виде json.something вроде:

@ResponseBody
    @RequestMapping(value = "/polls/{id}", method = RequestMethod.GET)
    public Poll getOptions(int id) {
        return pollDao.getPollOptionsById(id);
    }

У меня уже есть POJO с именем Poll, который имеет свойства, такие как poll_id, option_id, option_text, title, description и другие вещи. что я сделал, это:

private static final String SQL_GET_PollOptions_BY_ID = "SELECT * FROM vote_votes WHERE poll_id=? ORDER BY option_id ASC";

public Poll getPollOptionsById(int id) {

    try {
        List<Poll> poll = (List<Poll>) jdbcTemplate.query(SQL_GET_PollOptions_BY_ID, new PollOptionsExtractor(), id);
        return poll.get(0);
    } catch (EmptyResultDataAccessException | IndexOutOfBoundsException e) {
        return null;
    }
}

 private static class PollOptionsExtractor implements ResultSetExtractor {

        @Override
        public Object extractData(ResultSet rs) throws SQLException, DataAccessException {
            Map<Integer, Poll> map = new LinkedHashMap<>();
            Poll poll = null;
            while (rs.next()) {
                int id = rs.getInt("poll_id");
                int opt_id = rs.getInt("option_id");
                poll = map.get(id);
                if (poll == null) {
                    String opt_text = rs.getString("option_text");
                    poll = new Poll(id, opt_id, opt_text);
                    map.put(id, poll);
                }
            }
            return new ArrayList<>(map.values());
        }
    }

но когда я перехожу на localhost:8080/polls/{id}, я вижу только первый option_id и option_text каждого poll_id. обратите внимание, что возможно до 20 вариантов.

как я могу получить все опции для конкретного poll_id, а не только один?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...