2012-06-11 75 views
0

我有一個包含多個連接的sql語句;有時候會有記錄來自聯接,有時候不會。聯接爲空時不是錯誤。確定JOIN是否導致任何列

有沒有辦法來測試一個特定的連接是否爲空,而不必捕捉在結果集中找不到結果列時發生的異常?

換句話說,如果使用JDBC,我執行下面的SQL語句:

select * from AA left outer join BB on AA.keyField = BB.keyField 
    where keyField = "123" 

我想知道這是否聯接找到的任何領域,而不必捕獲異常。如果我然後執行java語句:

String valueString = rs.getString("BB.keyField"); 

我得到一個異常。我無法將rs.getString(「BB.keyField」)與null比較,因爲getString在連接中未找到任何值時會引發異常。

我希望這可以讓問題更清楚,並且我很抱歉沒有在第一個地方擴展它。

+0

你正在使用SELECT查詢或CREATE/UPDATE/DELETE操作嗎?如果一個JOIN產生一個空集並導致一個異常,你可能必須在調用任何基於寫的操作之前檢查結果。 –

+0

對不起,應該說 - 我從一個或多個表中選擇值,其中一些會有一些,有些則不會。 – arcy

+0

我不認爲你可以避免不檢查個別列值NULL。 –

回答

2

該查詢不會返回具有此類名稱的列。它將只使用列的簡單名稱(namekeyField等)。在你的數據庫查詢工具中執行查詢,你會看到哪些名字被分配給檢索的列。

你不應該做select *,並且總是選擇特定的列。你應該指定別名列,如果兩列具有相同的名稱:

select AA.id as aId, AA.name as aName, BB.id as bId, BB.name as bName from ... 

,然後,你可以放心地使用

rs.getString("aId"); 
rs.getString("bName"); 
... 

此外,拋出的異常包含一個消息,這將有助於您找出問題。閱讀。如果你不理解它,請發佈它。

相關問題