2012-01-25 39 views
10

Tập kết quả Tôi đang nói về điều này: http://docs.oracle.com/javase/1.4.2/docs/api/java/sql/ResultSet.htmlLàm cách nào để lặp qua các giá trị của một hàng từ tập hợp kết quả trong java?

Những gì tôi muốn làm là này ...

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

Tôi profecient hơn trong PHP, hơn JSP, FYI. Điều này sẽ được thực hiện bằng PHP như sau:

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

EDIT: Tôi đang tìm một giải pháp chung. chú ý rằng col là một biến, không phải là chữ.

+6

Mặc dù hoàn toàn có thể đọc kết quả trong JSP, nhưng đó không phải là cách thích hợp để thực hiện nó trong Java. Những thứ như vậy phải luôn luôn được thực hiện trong một lớp Java riêng biệt mà kết quả của nó sẽ chỉ được lặp lại trong JSP. – adarshr

+0

Tôi đánh giá cao lời khuyên chung chung. Tôi có thể đảm bảo với bạn tôi sẽ xử lý những chi tiết sau này ... mặc dù thành thật mà nói tôi ghét mọi khoảnh khắc tôi đang lập trình trong java. –

+0

Không có giải pháp nào được cung cấp sẽ không bao gồm câu lệnh ngầm, "bạn phải học cái gì đó mới". Nếu bạn đang truy xuất resultSet bằng cách sử dụng java, sau đó lặp qua resultSet, sử dụng java và tạo một cái gì đó có thể tiêu thụ được trong PHP, như Danh sách các hàng trong đó mỗi hàng là một danh sách các cột. – DwB

Trả lời

15

Đây chỉ là biến thể của câu trả lời 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. 

Chỉnh sửa Đã thêm cuối cùng cho tất cả các biến.

+0

rằng 'if ... else ...' là bắt buộc. –

0

Hãy nhớ đọc qua The Tutorial trước tiên.

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

Mặc dù hoàn toàn có thể đọc kết quả trong JSP, nhưng đó không phải là cách đúng để thực hiện trong Java. Những thứ như vậy phải luôn luôn được thực hiện trong một lớp Java riêng biệt mà kết quả của nó sẽ chỉ được lặp lại trong JSP.

+0

Tôi đã đọc hướng dẫn. Tôi cần một cách chung chung hơn. –

1

Thật dễ dàng nếu bạn sử dụng Java Standard Tag Library.

Kiểm tra này ra, quá:

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

Tôi mạnh mẽ sẽ ngăn cản bạn từ việc nhúng mã scriptlet trong JSP của bạn. Đó không phải là cách để đi.

Nếu bạn chấp nhận điều đó, thì mọi câu trả lời khác được đưa ra ở đây đều phải bị hủy. Tất cả chúng đều thuộc về các lớp Java phía máy chủ, không phải là một JSP.

+0

Tôi đánh giá cao liên kết của thư viện thẻ, tuy nhiên vẫn không có ngắt kết nối giữa việc nhận các hàng và cột vào một mảng được sử dụng với thẻ foreach? Tôi không biết làm cách nào để kết quả của mình được đặt thành một mảng như vậy. –

+0

Không, nếu bạn nhìn vào các thẻ sql ...... – duffymo

+0

Ồ, tôi đã không nhận thấy đề cập đến các thẻ sql tồn tại trong hướng dẫn mà bạn đã đề cập. Nội dung thú vị. Mặc dù tôi chắc chắn đánh giá cao lời khuyên của bạn, tôi nghĩ rằng một liên kết đến một hướng dẫn sử dụng thẻ sql sẽ có nhiều thông tin hơn chỉ là một liên kết đến một hướng dẫn thẻ. chỉ là phê bình mang tính xây dựng. Tôi thực sự đánh giá cao đề xuất của bạn! –

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

Nhưng tôi không khuyên bạn nên làm điều gì đó như thế này trực tiếp trong trang JSP. Xây dựng một số loại giá trị giữ (ví dụ: Danh sách các Danh sách) trong phần cuối và lặp lại điều đó.

+0

Cảm ơn câu trả lời. Tôi sẽ lấy lời khuyên của bạn và sử dụng câu trả lời của DwB khi tôi có thể ném nó vào một chức năng. Tôi ước tôi có thể đánh dấu cả hai câu trả lời của bạn là câu trả lời, nhưng vì tôi không thể cảm ơn và cảm thấy rằng bạn là người đầu tiên trả lời câu hỏi của tôi;). –

Các vấn đề liên quan