2013-03-03 37 views
5

Tôi có hai bảng. Và các bảng này có cùng lược đồ bao gồm userid, username. Tôi muốn kiểm tra có bất kỳ thông tin nào username trong số table1table2.Cách so sánh các giá trị của hai resultset trong java

rs1 = statement.executeQuery("select username from table1") 
rs2 = statement.executeQuery("select username from table2") 

logic của tôi là:

  • while(rs1.next())
  • so sánh giá trị của rs1 với tất cả các giá trị của rs2.
  • If khớp với tìm thấy in một giá trị else in cả hai giá trị.

Có cách nào để đạt được điều này trong java ... Xin vui lòng bất cứ ai giúp tôi ... Cảm ơn ...

Trả lời

4

Tôi sẽ sử dụng một câu lệnh SQL duy nhất:

select table1.username from table1, table2 where table1.username = table2.username 

chí này chỉ trả lại tên người dùng xuất hiện trong cả hai bảng, do đó không cần xử lý sau.

Cấu trúc này được gọi là inner join. Nếu bạn cũng muốn xác định tên người dùng duy nhất là table1 và/hoặc table2, bạn có thể sử dụng outer join.

0

Có, có một cách để làm điều này trong Java. Logic bạn đề xuất sẽ hoạt động, đó là O (n^2), điều này không tốt lắm. Bạn có thể đặt tên từ một rs trong một Set với thời gian truy cập ít hơn O (n) cho hiệu suất tổng thể cao hơn, nói O (n log n) hoặc thậm chí O (n). Có thể HashSet hoặc TreeSet

Thậm chí tốt hơn là sửa đổi truy vấn ngay từ đầu, trừ khi dữ liệu nằm trên cơ sở dữ liệu riêng biệt.

Đăng những gì bạn có cho đến nay để được trợ giúp thêm. Stack Overflow không thực sự là code xyz for me, for free, dịch vụ.

0

Pseudo-Code:

if (A.type = B.type) 
{ 
    PRINT same type 

    if (A.format = B.format) 
    { 
     PRINT same format 

     if (A.value = B.value) 
     { 
      PRINT same value 
     } 
     else 
     { 
      PRINT different value 
     } 
    } 
    else 
    { 
     PRINT different format 
    } 
} 
else 
{ 
    PRINT different type 
} 
0

Bạn có thể giải quyết nó thông qua câu lệnh SQL IN và NOT IN hoặc bạn có thể thử một cái gì đó như thế này:

public boolean compareResultSets(ResultSet resultSet1, ResultSet resultSet2) throws SQLException{ 
     while (resultSet1.next()) { 
      resultSet2.next(); 
      ResultSetMetaData resultSetMetaData = resultSet1.getMetaData(); 
      int count = resultSetMetaData.getColumnCount(); 
      for (int i = 1; i <= count; i++) { 
       if (!resultSet1.getObject(i).equals(resultSet2.getObject(i))) { 
        return false; 
       } 
      } 
     } 
     return true; 
    } 
0
I am giving an example to solve this: 

rs1 = statement.executeQuery("select username from table1") 
rs2 = statement.executeQuery("select username from table2") 

while(rs1.next()){ 
// Compare till rs1 reach to it's last record. 
    while(rs2.next()){ 
    if(){ 
     // Do your code here... 
    } 
    } 

// this will move resultSet cursor to first position. 
rs2.first(); 
} 
Các vấn đề liên quan