【问题标题】:Joining multiple result set加入多个结果集
【发布时间】:2011-01-14 17:49:51
【问题描述】:

我正在尝试开发一个 Java 应用程序,它可以合并来自多个数据源的数据,基本上是 RDBMS。场景是这样的。

我创建了一个到两个数据源的连接,比如说一个 MSSQL 数据库和其他 Oracle。同样在每个连接上,用户可以创建一个包含 SQL 查询和连接的 DataObject(Java 对象)。在连接上执行查询并显示结果。

现在我想要的是我的用户可以加入和过滤从多个 DataObject 获得的结果。

目前我正在寻找以下解决方案:

  • JDO/Hibernate - 我将从查询执行获得的 ResultSet 创建一个对象,并将使用多个具有过滤器和连接条件的对象。
  • Java RowSet - 我将在结果集上创建一个 RowSet 对象,并使用 JoinRowSet 和 FilteredRowSet 来加入多个结果集。

    请就我的选择给我建议。也请可以研究其他解决方案。

  • 【问题讨论】:

      标签: java hibernate jdbc jdo resultset


      【解决方案1】:

      我建议前者。对我来说,它就像获取实体列表一样简单,然后根据一些过滤器将它们添加到单个列表中。

      【讨论】:

      • 感谢醋的回复。再来一问。我已经开始阅读有关 JDO/Hibernate 的内容,发现需要为表创建一个对象类和一个定义数据类型和其他细节的映射 xml。就我而言,我有一个结果集而不是数据库表。所以我将不得不动态地创建对象 java 类和 xml 文件并使用增强器对其进行增强。不知道有没有可能?
      • 是的,我们称之为“实体”类。 XML 中的映射不是必需的,您可以使用 Java 5 中引入的 Java Annotations 来完成。在这种情况下,您需要忘记ResultSet,您将使用实体类来代替。自定义查询和结果仍然是可能的,至少使用 Hibernate。为此,您应该参考 Hibernate 文档。
      • 从得到的结果集中动态创建实体类呢?
      • @Saurabh:我们获取的不是ResultSet,而是实体对象。动态地,创建实体类是可能的,但不会支付。它会无缘无故地让事情变得模糊。
      • Vineger,可能是我不清楚。让我再次解释一下我的情况。我让我的用户指定一个包含多个表、过滤器子句、订单、连接条件和连接的复杂查询。所有这些信息都存储在我的课堂上。现在我想要的是让用户加入我的包含复杂查询和连接的类的两个或多个实例。直到这里我没有任何实体类或任何与 JDO 相关的东西,只有两个或更多的 ResultSet。我想使用用户指定的条件组合这些结果集。
      【解决方案2】:

      Oracle 带有一个通用 ODBC 网关,允许您将 oracle 数据库与另一个数据库链接,因此您可以使用 SQL 连接来自两个数据库等的表,就好像两个表都在 Oracle 上一样。有关详细信息,请参阅this link。通过这样做,您不必在 java 程序中复制数据库功能。

      【讨论】:

      • 感谢 ammoQ,但结果集可能并不总是在 oracle 上。它可以来自不同的来源
      • 通过那个网关,可以通过Oracle查询其他数据库; Oracle 通过网络透明地访问其他数据库。
      • 但为此我至少需要 Oracle 数据库才能使解决方案正常工作??
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-15
      • 2011-06-17
      • 2011-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多