Объединение нескольких наборов результатов

Я пытаюсь разработать приложение Java, которое объединяет данные из нескольких источников данных, в основном RDBMS. Сценарий примерно такой.

Я создаю соединение с двумя источниками данных, скажем, с базой данных MSSQL и другим Oracle. Также при каждом соединении пользователь может создать DataObject (объект Java), который содержит SQL-запрос и соединение. Запрос выполняется в соединении, и результат отображается.

Теперь я хочу, чтобы мой пользователь мог присоединиться и отфильтровать результат, полученный из нескольких DataObject.

Currently I am looking on the following solution:

  • JDO/Hibernate - I will create a object from the ResultSet obtained from the query execution and will use the multiple objects with filter and joining condition.
  • Java RowSet - I will create a RowSet object over result sets and user JoinRowSet and FilteredRowSet to join multiple result set.

    Посоветуйте, пожалуйста, мой выбор. Также, пожалуйста, можно рассмотреть другое решение.


  • person Community    schedule 09.02.2010    source источник


    Ответы (2)


    Я бы предложил первое. Для меня это так же просто, как получить список сущностей и добавить их в один список на основе некоторого фильтра.

    person Adeel Ansari    schedule 09.02.2010
    comment
    Спасибо Уксус за ответ. Еще один запрос. Я начал читать о JDO/Hibernate и обнаружил, что нужно создать класс объектов для таблицы и сопоставление xml, определяющее типы данных и другие детали. В моем случае у меня есть набор результатов вместо таблицы базы данных. Поэтому мне придется динамически создавать объектный класс java и xml-файл и улучшать его с помощью Enhancer. Я не знаю, возможно ли это? - person ; 09.02.2010
    comment
    Да, мы называем этот класс Entity. Отображение в XML не обязательно, вы можете сделать это с помощью аннотаций Java, представленных в Java 5. В этом случае вам нужно забыть о ResultSet, вместо этого вы будете использовать свои классы сущностей. Пользовательские запросы и результаты по-прежнему возможны, по крайней мере, с использованием Hibernate. Для этого вы должны обратиться к документации Hibernate. - person Adeel Ansari; 10.02.2010
    comment
    Как насчет динамического создания класса сущностей из полученного набора результатов? - person ; 10.02.2010
    comment
    @Saurabh: мы не получаем ResultSet, мы получаем объект сущности. Динамическое создание класса сущностей возможно, но не окупается. Это сделает вещи неясными без причины. - person Adeel Ansari; 10.02.2010
    comment
    Винегер, может быть, я не понимаю. Позвольте мне еще раз объяснить мой сценарий. Я позволяю своему пользователю указать сложный запрос, содержащий несколько таблиц, условия фильтра, заказы, условие соединения и соединение. Вся эта информация хранится в моем классе. Теперь я хочу, чтобы пользователь мог присоединиться к двум или более экземплярам моих классов, содержащих сложный запрос и соединение. До сих пор у меня нет никакого класса Entity или чего-либо, связанного с JDO, и у меня есть только два или более ResultSet. Я хочу объединить эти наборы результатов, используя условие, указанное пользователем. - person ; 10.02.2010
    comment
    Откуда вы получили ResultSet/s в этот момент? Жаль, что я не могу этого видеть. Вы получили информацию для запроса и объект соединения. Кстати, почему вы будете хранить объект подключения таким образом? - person Adeel Ansari; 10.02.2010
    comment
    Под соединением я имел в виду имя соединения. Мой пользователь может создать соединение имени, которое я объединяю при загрузке моего приложения. Когда пользователь выполняет сохраненный запрос, я выполняю запрос в соединении и получаю набор результатов. - person ; 10.02.2010
    comment
    Именно в этот момент, когда вы выполняете запрос, вы будете использовать Hibernate API для запроса к базе данных. Вы не будете создавать Statement или PreparedStatement для отправки запроса в базу данных. Теперь этот метод hibernate будет запрашивать базу данных с помощью оператора запроса и возвращать вам список объектов сущностей. - person Adeel Ansari; 10.02.2010

    Oracle поставляется с общим шлюзом ODBC, который позволяет вам связать базу данных Oracle с другой базой данных, поэтому вы можете объединять таблицы из обеих баз данных и т. д. с помощью SQL, как если бы обе таблицы находились в Oracle. Подробнее см. эту ссылку. При этом вам не нужно копировать функции базы данных в вашей Java-программе.

    person Erich Kitzmueller    schedule 09.02.2010
    comment
    Спасибо ammoQ, но один из наборов результатов не всегда может быть на оракуле. это может быть из разных источников - person ; 09.02.2010
    comment
    Через этот шлюз вы можете запрашивать другую базу данных через Oracle; Oracle прозрачно обращается к другой базе данных через сеть. - person Erich Kitzmueller; 09.02.2010
    comment
    Но для этого мне понадобится база данных Oracle, по крайней мере, для работы решения ?? - person ; 09.02.2010