2013-04-05 2 views
2

Я ищу способы сравнить два ResultSet s в java (RS1 и RS2).Сравнение результатов в java

вещей отметить/Требования

  • Результаты наборы из двух различных баз данных (Oracle & SQl-Server) .Таким образом, я не могу делать какие-либо изменения запросов SQL, чтобы copare результаты неправдоподобным.

  • Любой из ResultSet s может иметь больше строк, чем друг друга.

  • Любой из 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 

Ожидаемый результат

==> A действительно, поскольку он находится в RS1 & RS2, также Column2 для А в RS2>Column2 для А в RS1

==> B является недействительным, так как он не существует в RS1

==> C справедливо, потому что в RS1 & RS2, также Column2 для C в RS2>Column2 для C в RS1

==> D является недействительным, потому что даже если она есть в RS1 и RS2, тем Column2 для D в RS2 < Column2 для D в RS1

==> E неверен, потому что не существует в RS2

В поисках возможных вариантов решения этой проблемы.

ответ

3

Пройдите через оба ResultSet и сохраните их в Map<String, Integer>. После этого вы можете пройти через любой из keySet и продолжать сравнивать values. (Oracle, MySql, SQLServer, etc.).

+0

@RJ Apologies mate Map работает только с ключом, парой значений. Один из моих RS имеет 3 значения. Извиняюсь, не упоминал, что изначально, задавая вопрос, поскольку я не думал, что это будет иметь значение :( – misguided

+0

@misguided - вы правы. Это не имеет значения даже сейчас. Вы не должны волноваться о 'column3', поскольку вы не будете помещать это на свою карту и ни в свои чеки. Пусть' ResultSet' возвращает 3 столбца, вам просто нужно выбрать столбец 1 и 2 для заполнения вашей «Карты» в любом случае. – SudoRahul

+0

@RJ, что мне делать, если я хочу напечатать столбец3 для элементов RS2, нет в RS1? – misguided

0

Я бы просто прочитал результаты на двух картах с ключом в качестве первичного ключа, который, кажется, столбец1 в вашем случае, значение Column2.

Затем вы можете выполнить итерацию через набор записей первой карты и посмотреть, есть ли у второй карты ключ, и если да, сравните значения.

+0

Mate один из RS имеет 3 значения, извинения забыл упомянуть об этом в исходном запросе. – misguided

0

Я бы предложил прочитать значения из каждого ResultSet и поместить его в список, а затем сравнить два списка.
Вы можете выполнить getMetaData на каждом результирующем наборе, чтобы получить информацию о столбцах.
Это будет включать в себя информацию, такую ​​как количество столбцов, и затем вы сможете написать простой цикл, который получит значение каждого столбца и добавит его в список.

0

Пройдите через первый ResultSet и сохраните их в HashMap<String , Object>, где в качестве ключа используйте столбец1 и поместите все оставшиеся столбцы в объект Bean.

После этого итератор через второй результирующий набор и проверьте, существует ли столбец1 в HashMap или нет, просто выполнив поиск. если он существует, то получите объект с использованием getValue, а затем сравните с столбцами resultSet2.

Смежные вопросы