2011-10-04 39 views
28

Trong Java, tôi có một câu hỏi như thế này:Java, vòng lặp thông qua kết quả thiết

String querystring1= "SELECT rlink_id, COUNT(*)" 
        + "FROM dbo.Locate " 
        + "GROUP BY rlink_id "; 

Các rlink_id bảng có dữ liệu này:

Sid  lid 
3   2 
4   4 
7   3 
9   1 

Làm thế nào để trích xuất các giá trị với một ResultSet Java ?

Dưới đây là những gì tôi có cho đến nay:

String show[] = {rs4.getString(1)}; 
String actuate[] = {rs4.getString(2)}; 
asString = Arrays.toString(actuate); 

Trả lời

13

Result Set thực sự chứa nhiều dòng dữ liệu, và sử dụng một con trỏ để chỉ ra vị trí hiện tại. Vì vậy, trong trường hợp của bạn, rs4.getString(1) chỉ giúp bạn có được các dữ liệu trong cột đầu tiên của dòng đầu tiên. Để thay đổi sang hàng tiếp theo, bạn cần phải gọi next()

một ví dụ nhanh

while (rs.next()) { 
    String sid = rs.getString(1); 
    String lid = rs.getString(2); 
    // Do whatever you want to do with these 2 values 
} 

có rất nhiều phương pháp hữu ích trong ResultSet, bạn nên có một cái nhìn :)

+1

khi tôi gọi sid này n nắp ở đâu đó thông qua vòng lặp của nó đem lại cho tôi chỉ hàng đầu tiên của giá trị – user977830

+0

Không những rs.next() trong vòng lặp while bỏ qua kết quả đầu tiên? – Durin

+2

@Durin: Kiểm tra javadoc của [ResultSet.next()] (http://docs.oracle.com/javase/6/docs/api/java/sql/ResultSet.html#next%28%29), các " con trỏ" là thực sự chỉ ** trước ** hàng đầu tiên khi nó được tạo ra :) –

30
List<String> sids = new ArrayList<String>(); 
List<String> lids = new ArrayList<String>(); 

String query = "SELECT rlink_id, COUNT(*)" 
      + "FROM dbo.Locate " 
      + "GROUP BY rlink_id "; 

Statement stmt = yourconnection.createStatement(); 
try { 
    ResultSet rs4 = stmt.executeQuery(query); 

    while (rs4.next()) { 
     sids.add(rs4.getString(1)); 
     lids.add(rs4.getString(2)); 
    } 
} finally { 
    stmt.close(); 
} 

String show[] = sids.toArray(sids.size()); 
String actuate[] = lids.toArray(lids.size()); 
+0

không nên là "do- while"? Isnt the iterator đã ở đúng vị trí để truy cập hàng đầu tiên lúc bắt đầu? (tại sao các hướng dẫn truy cập hàng đầu tiên chỉ hoạt động nếu không)? – GameDeveloper

+0

Chắc chắn không phải (truy vấn có thể không trả về bất kỳ hàng nào). Bạn đang nói về hướng dẫn nào? –

+0

nhờ ok mà cố định vấn đề của tôi .. U.U đã có một hướng dẫn sai ở vị trí đầu tiên trong một tìm kiếm google, dường như biến mất bây giờ. – GameDeveloper

-3

Các vấn đề với mã của bạn là:

 String show[]= {rs4.getString(1)}; 
    String actuate[]={rs4.getString(2)}; 

Điều này sẽ tạo ra một mảng mới mỗi thời gian vòng lặp của bạn (không nối thêm như bạn có thể giả định) và do đó cuối cùng bạn sẽ chỉ có một phần tử trên mỗi mảng.

Đây là một trong nhiều cách để giải quyết này:

StringBuilder sids = new StringBuilder(); 
    StringBuilder lids = new StringBuilder(); 

    while (rs4.next()) { 
     sids.append(rs4.getString(1)).append(" "); 
     lids.append(rs4.getString(2)).append(" "); 
    } 

    String show[] = sids.toString().split(" "); 
    String actuate[] = lids.toString().split(" "); 

Những mảng sẽ có tất cả các yếu tố cần thiết.

+1

Đây là một cách kỳ lạ nhất đóng thùng mảng mà tôi từng thấy. Hơn nữa, nếu một trong những chuỗi bạn nhận được có chứa một không gian thì sao? –

+0

Bất kỳ lý do nào cho downvote? – Santosh

+0

OP đang lưu trữ một int và không phải là một chuỗi. Vì vậy, sẽ không có bất kỳ không gian cho chắc chắn. Nó chỉ là một cách khác để tạo ra một mảng ngoài những cách được đề xuất bởi những người khác. – Santosh

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