2016-11-06 11 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'. 

ここで、何らかの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; 
} 

は、私は、デフォルト値を返すことができる方法はありますか?時には複数の値が返されることもありますが、返される文字列値は1つだけにします。事前に感謝してください

+0

あなたは、例外をキャッチする可能性があり、1つのレコードだけがNAME'として0,1 –

答えて

0

1つの方法は、クエリ自体にデフォルトを配置することです。集計関数とCOALESCE()を使用してください:なしGROUP BY常に戻って1行で

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

集計クエリ、これはあなたが探しているものよりもように思われます。

また、テーブルのエイリアスをクエリに追加することにも注意してください。これにより、クエリの書き込みと読み込みが容易になります。

+0

'合体(分(h.NAME)、「<デフォルト値>」)リミ置く取得します –

0

nullまたはisEmptyの名前を確認してから、クエリの名前またはデフォルト値を返す必要があるかどうかを判断する必要があります。

if(name != null && !name.isEmpty()){ 
    return name; 
} else { 
    return "default"; 
} 
関連する問題