Oracle查询以Hasmap <string,string =“”>

时间:2018-10-16 11:18:22

标签: java spring spring-boot

我正在对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;

    }

1 个答案:

答案 0 :(得分:1)

我不确定我是否正确,所以请原谅我,如果这是错误的,我会尽力提供帮助。

我认为您代码的问题在于,您继续设置相同的Map键 distrito ,每个数字都来自查询ResultSet。

相反,您应该将值收集在List对象中,并在分配给对象时,将值设置为Map。

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.");
}

我不懂西班牙语,因此对变量名感到抱歉,无论如何,我希望含义已经清除。

在您之前的代码中,您可能得到错误的结果。