Spring - jdbcTemplate не удалось получить объект Pair - PullRequest
0 голосов
/ 07 января 2020

Могу ли я получить пару в качестве выхода для jdbcTemplate? Я попробовал следующее (которые работают для отдельных целых чисел)

Pair<Integer, Integer> result = jdbcTemplate.queryForObject(GET_PAIR, new Object[]{}, Pair.class);

Но он возвращает исключение

org.springframework.jdbc.IncorrectResultSetColumnCountException: Incorrect column count: expected 1, actual 2
    at org.springframework.jdbc.core.SingleColumnRowMapper.mapRow(SingleColumnRowMapper.java:92)
    at org.springframework.jdbc.core.RowMapperResultSetExtractor.extractData(RowMapperResultSetExtractor.java:93)
    at org.springframework.jdbc.core.RowMapperResultSetExtractor.extractData(RowMapperResultSetExtractor.java:60)
    at org.springframework.jdbc.core.JdbcTemplate$1.doInPreparedStatement(JdbcTemplate.java:703)
    at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:639)
    at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:690)
    at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:722)
    at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:732)
    at org.springframework.jdbc.core.JdbcTemplate.queryForObject(JdbcTemplate.java:800)

Пробовал с org.apache.commons.lang3.tuple.Pair

1 Ответ

1 голос
/ 07 января 2020

queryForObject требуется один результат и только один результат. Поэтому, когда вы получаете EmptyResultDataAccessException, это означает, что запрос для объекта ничего не нашел.

Однако я все еще не думаю, что это сработает, даже если вы получите результат. Лучше всего использовать RowMapper.

jdbcTemplate.query(GET_PAIR, (rs, i) -> new Pair(rs.getInt(1), rs.getInt(2)))

, что позволит вам сопоставить элементы с парой (будет возвращен список, по одному для каждой строки).

...