Запрос Oracle возвращен как Hasmap <String, String>

Я делаю этот запрос к базе данных Oracle SELECT T109.DISTRITO FROM T109 T109, где в столбце DISTRITO много чисел. Я хочу взять все эти числа и поместить их в конечную точку, чтобы при их использовании отображать эту информацию в формате Hashmap или Hasmap и т. д., Но всегда как Hashmap. Как я могу это сделать? Пожалуйста, не обращайте внимания на испанские слова, я знаю, что мы всегда должны писать код на английском, но это унаследованный код. Вот что я пробовал.

КОД

private final String CONSULTA_SOLO_DISTRITOS =
            " SELECT T109.DISTRITO  \n"
                    + " FROM T109 T109 \n";


 public HashMap<String, String> getOnlyDistritoTarificacion(String numero) {

        List<Map<String, Object>> filas_distritos = null;

        HashMap<String, String> distrito = new HashMap();

        filas_distritos = jdbcTemplate.queryForList(CONSULTA_SOLO_DISTRITOS, new Object[]{numero, numero});

        if ((filas_distritos != null) && (!filas_distritos.isEmpty()) || (filas_distritos.size() != 0)) {

            Map<String, Object> row = filas_distritos.get(0);

            distrito.put("distrito", (String) row.get("DISTRITO"));

            distrito.put("mensaje", "El n&uacute;mero consultado (" + numero + ") ya pertenece a un Distrito de Tarificaci&oacute;n.");

        } else {

            distrito.put("mensaje", "El n&uacute;mero consultado (" + numero + ") no pertenece a un Distrito de Tarificaci&oacute;n.");

        }

        return distrito;

    }

Я думаю, вам следует использовать 2 List для сохранения каждого значения (Distrito и mensaje), как только вы соберете все результаты, вы установите ключи на карте, присоединившись к списку emenet с вашим разделителем.

Mario Santini 16.10.2018 13:25

@MarioSantini, а что, если я хочу поставить только дистрито?

Tony 16.10.2018 13:26

Тогда вам понадобится только 1 объект List для сбора результатов.

Mario Santini 16.10.2018 13:28

@MarioSantini, не могли бы вы показать мне, как? Я новичок в этом, большое спасибо за то, что уделили время в aswer

Tony 16.10.2018 13:31
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
4
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я не уверен, что правильно понял, поэтому, пожалуйста, простите меня, если это не так, я просто пытаюсь помочь.

Я думаю, что проблема с вашим кодом заключается в том, что вы продолжаете устанавливать тот же ключ карты Distrito с каждым номером, полученным из запроса ResultSet.

Вместо этого вы должны собирать свои значения в объекте List, и когда они у вас есть, установите значение для своей карты.

public HashMap<String, String> getOnlyDistritoTarificacion(String numero) {

    List<String> distritos = new ArrayList();

    HashMap<String, String> distrito = new HashMap();

    List<Map<String, Object>> filas_distritos = jdbcTemplate.queryForList(CONSULTA_SOLO_DISTRITOS, new Object[]{numero, numero});

    if ((filas_distritos != null) && (!filas_distritos.isEmpty()) || (filas_distritos.size() != 0)) {

        Map<String, Object> row = filas_distritos.get(0);

        distritos.add((String) row.get("DISTRITO"));
        distritos.put("distrito", (String) row.get("DISTRITO"));

    }

    distrito.put("distrito", 
                 distritos.stream()
                 .collect(Collectors.joining(","));

    return distrito;
}

Итак, как вы видите, вы просто добавляете значения один раз после того, как собираете их все. Я использовал "," для объединения, но вы можете использовать другой символ или строку, которые вам нужны.

Кроме того, вам не нужно добавлять значение для "mensaje" на каждой итерации, просто проверьте значение, которое вам нужно установить:

boolean numberConsulted = true;

if ((filas_distritos != null) && (!filas_distritos.isEmpty()) || (filas_distritos.size() != 0)) {
    // .... code ...
} else {
    numberConsulted = false;
}


if (numberConsulted) {
    distrito.put("mensaje", "El n&uacute;mero consultado (" + numero + ") ya pertenece a un Distrito de Tarificaci&oacute;n.");
} else {
    distrito.put("mensaje", "El n&uacute;mero consultado (" + numero + ") no pertenece a un Distrito de Tarificaci&oacute;n.");
}

Я не знаю испанского, извините за имя переменной, надеюсь, смысл понятен, в любом случае просто спросите.

В вашем предыдущем коде вы можете получить неверный результат.

Еще раз спасибо за то, что уделили мне немного времени, я могу работать с этим объяснением. Grazie mille!

Tony 16.10.2018 14:05

Другие вопросы по теме