2012-01-23 9 views
2

私はかなりJavaに新しいですし、どのように私はMySQLのクエリを介して返されるすべての列を得ることができたのだろうかと思っていた。例えば、Java resultset max column?

SELECT * FROM `login` 

そしてその後、私は結果を返すために、このコードを持っていた:

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

私は10ので、動的MySQLのクエリの列の最大数であるように、forループにしたいです。これを行う簡単な方法はありますか?ありがとう。

答えて

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個のカラムがあり、SELECT *を使用している場合、必要な数に関係なく、100個のカラムすべてがすべてのローに対してマシンに戻ってくることを意味します。その表に100万行がある場合、必要に応じてSELECT *を返します。クライアントでフィルタリングするのは非効率です。 SQLでフィルタリングを行います - それがうまくいくこと - 必要なものだけを戻します。 – duffymo

+0

ああ、大丈夫です! 2番目の理由として、column_numberとcolumn_nameのレコードにアクセスすることに違いがあると思っていました... lol – Gevorg

1

はい、あなたがしたいです返されるフィールドを制限します。これはSQLの問題であり、Javaの問題ではありません。あなたのクエリは、このようなものに変更します。

select this, that, theothercolumn from mytable; 

その後、あなたはそれを動的に制限するために、これを使用することができます:

rs.getMetaData().getColumnCount()