Я делаю этот запрос к базе данных 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úmero consultado (" + numero + ") ya pertenece a un Distrito de Tarificación.");
} else {
distrito.put("mensaje", "El número consultado (" + numero + ") no pertenece a un Distrito de Tarificación.");
}
return distrito;
}
@MarioSantini, а что, если я хочу поставить только дистрито?
Тогда вам понадобится только 1 объект List для сбора результатов.
@MarioSantini, не могли бы вы показать мне, как? Я новичок в этом, большое спасибо за то, что уделили время в aswer




Я не уверен, что правильно понял, поэтому, пожалуйста, простите меня, если это не так, я просто пытаюсь помочь.
Я думаю, что проблема с вашим кодом заключается в том, что вы продолжаете устанавливать тот же ключ карты 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úmero consultado (" + numero + ") ya pertenece a un Distrito de Tarificación.");
} else {
distrito.put("mensaje", "El número consultado (" + numero + ") no pertenece a un Distrito de Tarificación.");
}
Я не знаю испанского, извините за имя переменной, надеюсь, смысл понятен, в любом случае просто спросите.
В вашем предыдущем коде вы можете получить неверный результат.
Еще раз спасибо за то, что уделили мне немного времени, я могу работать с этим объяснением. Grazie mille!
Я думаю, вам следует использовать 2 List для сохранения каждого значения (Distrito и mensaje), как только вы соберете все результаты, вы установите ключи на карте, присоединившись к списку emenet с вашим разделителем.