2013-04-05 68 views
2

我正在尋找方法來比較java中的兩個ResultSet s(RS1RS2)。在java中比較結果集

需要注意的事項/要求

  • 結果集是從兩個不同的數據庫(Oracle & SQl-Server)。因此我不能做任何SQL查詢更改copare結果牽強。

  • ResultSet中的任何一行可以具有比彼此更多的行。

  • 任何ResultSet可以具有數據不是它們在其他ResultSet

實施例:

RS1      RS2 
Column1 Column2   Column1 Column2 Column3 
A  1     A  2  ITEM1 
C  1     B  4  ITEM2 
D  2     C  2  ITEM3 
E  5     D  1  ITEM4 

預期結果

==>甲是有效的,因爲它在RS1 & RS2,也Column2對於A在RS2>Column2對於A在RS1

==> B是無效的,因爲它是不存在在RS1

==> C是有效的,因爲它是在RS1 & RS2,在RS1還Column2對C在RS2>Column2對於C

==> d是無效的,因爲,即使它是在有和RS1RS2,所述Column2爲d在RS2 < Column2爲d的RS1

==> E是無效的,因爲它不存在於RS2

尋找可行的方案來解決這個問題。

回答

3

遍歷您的ResultSet s並將它們存儲在Map<String, Integer>中。之後,您可以遍歷keySet,並繼續比較values

這可讓您比較任何種類的數據庫(Oracle, MySql, SQLServer, etc.)中的2 ResultSet

+0

@RJ道歉配對地圖只適用於關鍵值對。我的一個RS有3個值。道歉,沒有提到,最初在詢問查詢時我認爲這不會有什麼區別:( – misguided 2013-04-05 05:03:17

+0

@misguided - 你是對的,即使現在也沒有什麼區別,你不應該擔心關於'column3',因爲你不會把它放到你的地圖中,也不會放在你的支票上。讓ResultSet返回3列,你只需要從中選擇第1和第2列來填充你的'Map'。 – SudoRahul 2013-04-05 05:11:07

+0

@RJ如果我想在RS1中打印第3列中的RS2項目,我該怎麼辦? – misguided 2013-04-05 05:14:25

0

我只是簡單地將結果讀取到兩個地圖中,鍵爲主鍵,在您的情況下,它似乎是Column1,值爲Column2。

然後,您可以遍歷第一個映射的條目集,並查看第二個映射是否具有該鍵,如果是,則比較這些值。

+0

配合其中一個RS有3個值,在最初的查詢中忘了提到這個道歉。 – misguided 2013-04-05 05:04:15

0

我會建議從每個ResultSet中讀取值,並將其放在List中,然後將 與兩個List進行比較。
您可以對每個結果集執行getMetaData以獲取有關列的信息。
這將包括諸如列數等信息,然後您將能夠編寫一個簡單的循環來獲取每列的值並將其添加到列表中。

0

循環遍歷第一個ResultSet並將它們存儲在HashMap<String , Object>中,其中使用column1作爲Key並將所有其餘列放入Bean對象中。

之後,iterare通過第二個resultSet,並檢查是否存在於HashMap中的column1只是做一個查找。如果存在,則使用getValue獲取Object,然後與resultSet2列進行比較。