2012-01-25 10 views
10

Zestaw wyników mówię to: http://docs.oracle.com/javase/1.4.2/docs/api/java/sql/ResultSet.htmlJak wykonać iterację wartości wiersza z zestawu wyników w java?

Co chciałbym zrobić to ...

for row in rows 
    for col in row 
     //col is the name of the column, row[col] is the value. 

jestem bardziej profecient w PHP, niż JSP, FYI. To byłoby zrobione w PHP, tak:

foreach($rs as $row) 
    foreach($row as $col => $val) 
     //val is the cell value, and column is the column name 

EDYCJA: Szukam ogólnego rozwiązania. zauważ, że col jest zmienną, a nie literałem.

+6

Chociaż możliwe jest odczytywanie zestawów wyników w JSP, nie jest to właściwy sposób w Java. Takie rzeczy powinny zawsze być wykonywane w oddzielnej klasie Javy, której wynik będzie jedynie iterowany w JSP. – adarshr

+0

Doceniam ogólne porady. Mogę cię zapewnić, że poradzę sobie z tymi szczegółami później ... chociaż szczerze, nienawidzę każdej chwili, kiedy programuję w Javie. –

+0

Żadne rozwiązanie nie zawiera niejawnej instrukcji "musisz nauczyć się czegoś nowego". Jeśli pobierasz zestaw wyników za pomocą języka Java, przeprowadź pętlę za pomocą zestawu wynikowego, używając java i utwórz coś, co jest zużywalne w PHP, na przykład listę wierszy, gdzie każdy wiersz jest listą kolumn. – DwB

Odpowiedz

15

To tylko odmiana odpowiedzi a_horse_with_no_name.

final ResultSetMetaData meta = rs.getMetaData(); 
final int columnCount = meta.getColumnCount(); 
final List<List<String>> rowList = new LinkedList<List<String>>(); 
while (rs.next()) 
{ 
    final List<String> columnList = new LinkedList<String>(); 
    rowList.add(columnList); 

    for (final int column = 1; column <= columnCount; ++column) 
    { 
     final Object value = rs.getObject(column); 
     columnList.add(String.valueOf(value)); 
    } 
} 

// add the rowList to the request. 

Edit Dodano końcowy dla wszystkich zmiennych.

+0

, że 'if ... else ...' jest obowiązkowe. –

0

Najpierw należy przeczytać The Tutorial.

while(rs.next()) { 
    String col1 = rs.getString("NAME"); // if NAME is VARCHAR2, for eg. 
} 

Chociaż możliwe jest odczytywanie wyników w JSP, nie jest to właściwy sposób w Javie. Takie rzeczy powinny zawsze być wykonywane w oddzielnej klasie Javy, której wynik będzie jedynie iterowany w JSP.

+0

Przeczytałem już samouczek. Potrzebuję bardziej ogólnego sposobu. –

1

To proste, jeśli używasz Java Standard Tag Library.

to sprawdzić też:

http://docs.oracle.com/javaee/1.4/tutorial/doc/JSTL3.html

gorąco zniechęcać osadzania kodu skrypty w swoim JSP. To nie jest droga.

Jeśli to zaakceptujesz, wówczas każda inna odpowiedź tutaj musi zostać odrzucona. Wszystkie należą do klasy Java po stronie serwera, a nie do strony JSP.

+0

Doceniam połączenie z biblioteką znaczników, jednak czy nie ma wciąż rozłączenia między otrzymaniem wierszy i kolumn w tablicy, która będzie używana z tagiem foreach? Nie mam pojęcia, jak ustawić mój zestaw wyników w takiej tablicy. –

+0

Nie, jeśli spojrzysz na znaczniki sql ...... – duffymo

+0

Och, nie zauważyłem wzmianki o tagach sql istniejących w tutorialu, o którym wspomniałeś. Fajne rzeczy. Chociaż zdecydowanie doceniam twoją radę, myślę, że link do samouczka używającego tagów sql byłby bardziej pouczający niż tylko link do samouczka tagów. tylko konstruktywna krytyka. Naprawdę doceniam twoją sugestię! –

10
ResultSetMetaData meta = rs.getMetaData(); 
int colCount = meta.getColumnCount(); 
while (rs.next()) 
{ 
    for (int col=1; col <= colCount; col++) 
    { 
     Object value = rs.getObject(col); 
     if (value != null) 
     { 
      System.out.print(value.toString()); 
     } 
    } 
} 

Ale nie poleciłbym zrobić czegoś takiego bezpośrednio na stronie JSP. Zbuduj pewnego rodzaju właściciela wartości (np. Listę list) w backend i powtórz to.

+0

Dzięki za odpowiedź. Wezmę twoją radę i użyjemy odpowiedzi Dwb, bo mogę to wykorzystać w funkcji. Chciałbym móc zaznaczyć obie odpowiedzi jako odpowiedź, ale dlatego, że nie mogę przyjąć podziękowania i poczucia, że ​​pierwszy odpowiedziałeś na moje pytanie;). –

Powiązane problemy