2016-11-06 4 views
1

Ich versuche, eine Zeichenfolge aus SQL-DB abzurufen. Ich habe die folgende Abfrage:Sql-Abfrage-Aufruf schlägt fehl, wenn kein Datensatz gefunden wird

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

Jetzt, wenn es keinen Datensatz gegen eine ID gibt, schlägt der Funktionsaufruf fehl. hier ist meine Funktion Code, den ich anrufen bin Daten zu holen:

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

Gibt es eine Möglichkeit, einen Standardwert zurückgeben kann? und manchmal gibt es mehrere Werte zurück, aber ich möchte nur einzelne Zeichenfolge Wert zurückgegeben werden, ist das möglich? Danke im Voraus

+0

Sie die Ausnahme abfangen konnte und nur ein Datensatz setzen Limi 0,1 –

Antwort

0

Eine Methode besteht darin, den Standard in die Abfrage selbst zu setzen. Verwenden Sie eine Aggregationsfunktion und 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'; 

Eine Aggregation Abfrage ohne GROUP BYimmer gibt eine Zeile, so würde dies scheint mehr zu sein, was Sie suchen.

Beachten Sie auch, dass ich Tabellenaliase in die Abfrage einfügen. Diese erleichtern das Schreiben und Lesen der Abfrage.

+0

'coalesce (min (h.NAME), '') als name' erhalten –

0

Sie sollten in der Lage sein, den Namen für null oder isEmpty zu überprüfen und dann entscheiden, ob Sie den Namen aus der Abfrage oder einen Standardwert zurückgeben sollten.

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