2012-01-23 86 views
2

我對Java相當陌生,想知道如何通過MySQL查詢獲取所有返回的列。例如,Java結果集最大列?

SELECT * FROM `login` 

然後,我有這個代碼,返回結果:

 while (rs.next()) { 
      for (byte i = 1; i < 10; i++) { 
       result = result+" "+rs.getString(i); 
      } 
     } 

我想10 for循環是因爲動態的MySQL查詢的列的最大數量。有沒有簡單的方法來做到這一點?謝謝。

回答

3

雖然,正如duffymo建議,最好是拼出你想收到的查詢中的列,您可以使用ResultSet元數據的獲取列數返回:

ResultSetMetaData rsmd = rs.getMetaData(); 
int numberOfColumns =rsmd.getColumnCount(); 

while (rs.next()) { 
     for (byte i = 1; i <= numberOfColumns; i++) { 
      result = result+" "+rs.getString(i); 
     } 
} 
0

我建議不要使用SELECT *。如果你知道你想要的列,把它們拼出來。面對列更改,它會使代碼更健壯,並減少線路上的字節數。

+0

你怎麼正好與「減少對線的字節數」呢? – Gevorg

+1

如果您在表格中有100列,並且您選擇了*,那意味着無論您需要多少行,所有100列都會返回到您的機器的每一行。如果該表有一百萬行,則無論您是否需要它們,SELECT *都會將它們全部帶回。在客戶端上過濾它們效率不高。在SQL中進行過濾 - 它擅長的事情 - 並且只能帶回你需要的東西。 – duffymo

+0

啊,好的!一秒鐘以來,我認爲訪問記錄的column_number與column_name ... lol之間可能存在差異 – Gevorg

1

是的,你會限制返回的字段。這是一個SQL問題,而不是Java問題。您的查詢更改爲這樣的事:

select this, that, theothercolumn from mytable; 

然後你可以用它來動態地限制它:

rs.getMetaData().getColumnCount()