2012-01-25 107 views
10

結果集,我說的是: http://docs.oracle.com/javase/1.4.2/docs/api/java/sql/ResultSet.html如何從java中的結果集中遍歷行的值?

我想要做的是這樣的......

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

我更profecient在PHP,JSP相比,僅供參考。這將在PHP中完成,如下所示:

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

編輯:我正在尋找一個通用的解決方案。注意col是一個變量,而不是文字。

+6

雖然完全可以在JSP中讀取結果集,但這不是在Java中執行的正確方法。這樣的事情應該總是在一個單獨的Java類中執行,其結果將僅僅在JSP中迭代。 – adarshr

+0

我欣賞通用的建議。我可以向你保證,稍後我會處理這些細節......雖然老實說,我討厭每一刻我用java編程。 –

+0

沒有提供的解決方案將不包括隱含的陳述,「你必須學習新的東西」。如果您使用java檢索resultSet,然後使用java遍歷resultSet,並創建一些可在PHP中使用的東西,例如每行都是列列的行列表。 – DwB

回答

15

這只是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. 

編輯增加了決賽的所有變量。

+0

「if ... else ...'是強制性的。 –

0

請務必首先閱讀The Tutorial

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

雖然這是完全有可能在JSP中讀取結果集,這不是做在Java中正確的方式。這樣的事情應該總是在一個單獨的Java類中執行,其結果將僅僅在JSP中迭代。

+0

我已經閱讀了教程。我需要一個更通用的方法。 –

1

如果您使用Java Standard Tag Library,很容易。

檢查了這一點,太:

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

我強烈在JSP中嵌入scriptlet代碼氣餒。這不是要走的路。

如果您接受,那麼此處給出的其他答案都必須丟棄。它們都屬於服務器端Java類,而不是JSP。

+0

我很欣賞標籤庫的鏈接,但是在將行和列獲取到數組中以便與foreach標籤一起使用時,還沒有斷開連接嗎? 我不知道如何將我的結果集放入這樣的數組中。 –

+0

不是如果你看看sql標籤...... – duffymo

+0

哦,我沒有注意到你提到的教程中提到的sql標籤。 很酷的東西。 儘管我非常感謝您的建議,但我認爲使用sql標記的教程鏈接比鏈接到標記教程的鏈接更具信息性。 只是建設性的批評。我真的很感激你的建議! –

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()); 
     } 
    } 
} 

但我不建議直接在JSP頁面中做這樣的事情。在後端建立某種價值持有者(例如列表清單)並對其進行迭代。

+0

感謝您的回答。我會接受你的建議,並使用DwB的答案,因爲我可以將它放入函數中。 我希望我可以將你的答案都標記爲答案,但是因爲我不能感謝你,並且感覺你是第一個回答我的問題的人)。 –