2012-05-07 44 views
0

如何從Resultset或DataList中刪除空列?Java:刪除Resultset中的空列

例如:我運行一個查詢,則SQL返回一個結果

Name Age Address Telephone 
---- --- ------- --------- 
Zed  23    12345456 
Charlo 25    53232323 

我怎樣才能在結果中刪除空列「地址」?

在此先感謝。

+1

如果地址列總是未設置,則選擇僅名稱,年齡和電話,如果有時設置,則必須處理空值。 – BigMike

+2

如果地址始終爲空,請不要選中它。 –

+0

但問題是我們不知道在查詢之前哪一列將全爲空。 – Ianthe

回答

1

不。你告訴SQL你想在查詢中找到哪些列,它會給你所要求的所有列。

+0

最佳答案在這個線程國際海事組織 - 乾淨和簡單。 – Romain

+0

這些列由用戶和where子句中的過濾器動態定義,所以我需要構建執行前的查詢,我不知道哪一列將有空數據。使用「NOT NULL」子句可以消除列中具有空值的行,但不是必需的則表示該列爲空。所以我需要在查詢後從ResultSet中刪除空列。 – Ianthe

+0

@sprenna你將不得不在java端執行它。 – Kevin

0

如果地址始終爲空或不是必需的,那麼只需更改生成ResultSet的查詢即可。例如,您的查詢會是這樣......

SELECT Name, Age, Telephone FROM Table; 

否則,如果一些條目有一個地址,您需要在您遍歷他們在您的ResultSet檢測用空值。

你也可以改變你的查詢只與一個地址,像這樣的返回結果...

SELECT Name, Age, Address, Telephone FROM Table WHERE Address IS NOT NULL; 

你無法預先知道一整列是否是空的 - 你必須遍歷在ResultSet每個條目檢測到它,或者寫一個數查詢像這樣...

SELECT COUNT(Address) FROM Table WHERE Address IS NOT NULL; 

這將返回0如果沒有地址。你也可以在你的其他專欄上使用它。

0

如果查詢中的列始終爲空,則無法從該查詢中刪除列,但可以從將ResultSet映射到的對象中排除所有NULL值。 (你不會通過ResultSet走出持久層,是嗎?)

0

如果列總是空的,那麼,正如其他人已經注意到的那樣,只要從查詢的SELECT子句中移除它即可。如果您使用「SELECT *」,則不要。這是一個不好的做法。您可能正在處理各種未使用的數據。如果一個SELECT *選取了一個不需要的5字節字段,我認爲沒什麼大不了的。但即使現在這樣做了,下週你或其他人可能會在記錄中添加一個50k BLOB字段,然後爲了獲得需要的50個字節,你還需要處理50k個不需要的字節。

如果你的意思是說你得到ResultSet後發現該列總是空白或空的,那又如何?你必須閱讀數據才能發現這一點。 ColumnSet在ResultSet中並不強制顯示屏幕上顯示的內容。如果你想消除顯示器的列,你可以在代碼中做到這一點。