2012-01-23 3 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. Есть ли простой способ сделать это? Благодарю.

ответ

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 столбцов возвращаются на ваш компьютер для каждой строки, независимо от того, сколько вам нужно. Если эта таблица имеет миллион строк, SELECT * возвращает их обратно, нужны ли они вам или нет. Неэффективно фильтровать их на клиенте. Сделайте фильтрацию в SQL - вещь, в которой она хороша - и верните только то, что вам нужно. – duffymo

+0

А, ок! На секунду я подумал, что может быть разница между доступом к записи с помощью ее column_number vs its column_name ... lol – Gevorg

1

Да, вы бы ограничьте возвращаемые поля. Это проблема SQL, а не проблема Java. Измените запрос на что-то вроде этого:

select this, that, theothercolumn from mytable; 

Затем вы можете использовать это, чтобы ограничить его динамически:

rs.getMetaData().getColumnCount()