2010-02-18 38 views

Trả lời

11

nếu hai ResultSet s là từ cùng một cơ sở dữ liệu thì tại sao không kết hợp chúng trong quá trình truy xuất bằng cách sử dụng union; ví dụ.

select A, B 
from C 
union 
select A, B 
from D 

Tuy nhiên, nếu đây không phải là một lựa chọn thì tôi khuyên bạn nên xác định một lớp để đại diện cho một Row chiết xuất từ ​​ResultSet của bạn và thực hiện equals/hashCode cho phép được so sánh với bình đẳng. Sau đó, chỉ cần thêm mỗi vào một số Set (ví dụ: HashSet) để xóa các từ khóa trùng lặp.

+1

+1 ... câu trả lời tuyệt vời ... rất chính xác và đến mức ... Tôi sẽ upvote bạn 10 lần nếu tôi có quyền. –

+2

UNION loại bỏ các bản sao, buộc phải sắp xếp. UNION ALL kết hợp các bộ kết quả. Nếu dups có thể chấp nhận được hoặc bạn biết hai tập kết quả không có chồng chéo, hãy sử dụng UNION ALL. –

+0

@Adam: OP đã tuyên bố anh ta muốn các hàng trùng lặp chỉ được hiển thị một lần, vì vậy tại sao tôi đã đề cập UNION chứ không phải UNION ALL. – Adamski

3

Bạn có thể:

  1. Tạo một lớp có các đặc tính tương ứng với các cột
  2. thực hiện equals()hashCode() phương pháp sử dụng các lĩnh vực mà bạn xác định được "nhân bản" (chúng ta hãy IDE của bạn giúp bạn với thế hệ của những)
  3. createa một Set (HashSet):

    Set combinedDataSet = new HashSet();

  4. Lặp mỗi ResultSet, và xây dựng các đối tượng:

    while (rs1.next) { 
        YourClass obj = new YourClass(); 
        obj.setSomeProperty(rs.getString(1)); 
        obj.setAnotherProperty(rs.getString(2)); 
        // etc.. 
        cominbedDataSet.add(obj); 
    } 
    

    Các lặp Cũng vậy với rs2

Làm điều này chỉ trong trường hợp bạn không thể có được kết quả mong muốn thông qua một Truy vấn SQL!

+0

+1 ... .......... :) –

+0

@Bozho Tôi muốn liên lạc với bạn. Tôi không có bất kỳ vấn đề lập trình nào mà tôi có thể đăng ở đây. Bạn đã trả lời các câu hỏi khác nhau của tôi và do đó, tôi biết rằng bạn là người thích hợp để có lời khuyên từ bạn cho sự nghiệp của tôi. Tôi cũng đã kiểm tra blog của bạn nhưng không tìm thấy cách nào để liên lạc với bạn. Tôi không muốn sử dụng SO để giao tiếp với bạn vì nó sẽ là sai. Tôi sẽ rất biết ơn bạn nếu bạn cho tôi một thời gian từ thời gian quý báu của bạn và cho tôi biết làm thế nào tôi có thể trò chuyện với bạn. Cảm ơn. –

+1

@Yatendra Goel nếu bạn có câu hỏi cụ thể, hãy hỏi họ tại SO. Nếu bạn có câu hỏi ít cụ thể hơn, hãy kiểm tra blog của tôi (được liên kết trong tiểu sử của tôi ở đây) và gửi cho tôi nhận xét. – Bozho

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