如果未找到记录,则SQL查询调用将失败

时间:2016-11-06 14:32:13

标签: java mysql sql json database

我正在尝试从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;
}

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

2 个答案:

答案 0 :(得分:0)

一种方法是将默认值放入查询本身。使用聚合函数和>>> HOUR_ON = str("08:09:00") >>> a = datetime.datetime.strptime(HOUR_ON,'%H:%M:%S') >>> HOUR_ON = a + datetime.timedelta(0,1800) >>> print HOUR_ON 1900-01-01 08:39:00

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'; 的聚合查询总是会返回一行,所以这似乎更符合您的要求。

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

答案 1 :(得分:0)

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

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