【问题标题】:Sql query call fails if no record is foundsql查询调用失败,如果没有找到记录
【发布时间】:2017-03-19 22:17:00
【问题描述】:

我正在尝试从 sql db 中获取字符串。我有以下查询:

select DISTINCT HARDWARE.NAME
from HARDWARE INNER JOIN
     HARDWARE_LINKING
     on HARDWARE.ID = HARDWARE_LINKING.ID
where HARDWARE_LINKING.EXTERNALID='5528752'.

现在,当没有针对任何 id 的记录时,函数调用会失败。 这是我为获取数据而调用的函数代码:

public String search(String externalId) {
  String SQL = "select DISTINCT HARDWARE.NAME  from HARDWARE INNER JOIN HARDWARE_LINKING on HARDWARE.ID = HARDWARE_LINKING.ID where HARDWARE_LINKING.EXTERNALID=?";
        Object[] input = new Object[] {externalId};
        String name = jdbcTemplate.queryForObject(SQL,input, String.class);
        return name;
}

有什么方法可以返回默认值吗?有时会返回多个值,但我只想返回单个字符串值,这可能吗?提前谢谢你

【问题讨论】:

  • 你可以捕捉到异常并只获得一条记录 put limi 0,1

标签: java mysql sql json database


【解决方案1】:

一种方法是将默认值放入查询本身。使用聚合函数和COALESCE()

select coalesce(h.NAME, '<default value>') as NAME
from HARDWARE h INNER JOIN
     HARDWARE_LINKING hl
     on h.ID = hl.ID
where hl.EXTERNALID = '5528752';

没有GROUP BY 的聚合查询总是返回一行,所以这似乎是您正在寻找的更多内容。

还请注意,我将表别名放入查询中。这些使查询更易于编写和阅读。

【讨论】:

  • coalesce(min(h.NAME), '&lt;default value&gt;') as NAME
【解决方案2】:

您应该能够检查 name 是否为 null 或 isEmpty,然后决定是否应该从查询中返回名称或默认值。

if(name != null && !name.isEmpty()){
    return name;
} else {
    return "default";
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-12
    • 2019-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多