2016-11-06 3 views
1

Я пытаюсь получить строку из sql db. У меня есть следующий запрос:Вызов запроса Sql невозможен, если запись не найдена

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

Теперь, когда нет записи против какого-либо идентификатора, вызов функции завершается с ошибкой. вот мой код функции, что я звоню, чтобы получить данные:

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; 
} 

Есть ли способ, что я могу вернуть значение по умолчанию? и иногда возвращаются несколько значений, но я хочу вернуть только одно значение строки, возможно ли это? Заранее благодарю

+0

вы могли бы поймать исключение и получить только один рекорд поставил ограни 0,1 –

ответ

0

Один из способов - поместить значение по умолчанию в сам запрос. Используйте функцию агрегации и 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всегда возвращает одну строку, так что, казалось бы, более то, что вы ищете.

Также обратите внимание, что я помещал псевдонимы таблицы в запрос. Это упрощает запись и чтение запроса.

+0

'Coalesce (мин (h.NAME), '<значение по умолчанию>') как name' –

0

Вы должны иметь возможность проверить имя для null или isEmpty, а затем решить, следует ли вам возвращать имя из запроса или значение по умолчанию.

if(name != null && !name.isEmpty()){ 
    return name; 
} else { 
    return "default"; 
} 
Смежные вопросы