2013-03-03 9 views
5

Ho due tabelle. E queste tabelle hanno lo stesso schema costituito da userid, username. Voglio controllare c'è qualche comune username in table1 e table2.Come confrontare i valori di due set di risultati in java

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

La mia logica è:

  • while(rs1.next())
  • confrontare il valore di rs1 con ogni valore di rs2.
  • If la corrispondenza trovata ha trovato uno del valore else stampa entrambi i valori.

C'è un modo per raggiungere questo obiettivo in java ... Per favore qualcuno mi aiuti ... Grazie ...

risposta

4

vorrei utilizzare una singola istruzione SQL:

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

Questa volontà restituiscono solo i nomi utente visualizzati in entrambe le tabelle, quindi non sarà necessaria alcuna elaborazione successiva.

Questo costrutto è chiamato inner join. Se si desidera inoltre identificare nomi utente che sono univoci per table1 e/o table2, è possibile utilizzare uno outer join.

0

Sì, c'è un modo per farlo in Java. La logica che proponi funzionerebbe, è O (n^2), che non è molto buona. Puoi inserire i nomi da un rs in un Set con tempo di accesso inferiore a O (n) per prestazioni complessive più elevate, ad esempio O (n log n) o anche O (n). Forse o TreeSet

Ancora meglio è modificare la query in primo luogo, a meno che i dati non si trovino su database separati.

Pubblica quello che hai finora per ottenere più aiuto. Stack Overflow non è in realtà un servizio code xyz for me, for free.

0

pseudo-codice:

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

è possibile risolverlo attraverso istruzione SQL IN e NOT IN o si può provare qualcosa di simile:

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