模块  java.sql.rowset
软件包  javax.sql.rowset

Interface JoinRowSet

  • All Superinterfaces:
    AutoCloseableCachedRowSetJoinableResultSetRowSetWebRowSetWrapper

    public interface JoinRowSet
    extends WebRowSet
    JoinRowSet接口提供了一种机制,用于将来自不同RowSet对象的相关数据组合到一个JoinRowSet对象中,该对象表示SQL JOIN 换句话说, JoinRowSet对象充当来自形成SQL JOIN关系的RowSet对象的数据的容器。

    Joinable接口提供了设置,检索和Joinable设置匹配列的方法,这是建立SQL JOIN关系的基础。 或者,可以通过将匹配列提供给适当版本的JointRowSet方法addRowSet来设置匹配列。

    1.0概述

    已断开连接的RowSet对象( CachedRowSet对象和扩展CachedRowSet接口的实现)没有标准方法在RowSet对象之间建立SQL JOIN ,而无需重新连接到数据源的昂贵操作。 JoinRowSet接口专为满足此需求而设计。

    可以将任何RowSet对象添加到JoinRowSet对象,以成为SQL JOIN关系的一部分。 这意味着连接和断开的对象RowSet都可以是JOIN一部分。 RowSet在连接环境中JdbcRowSet对象( JdbcRowSet对象)使用它们已连接的数据库,以直接在表之间建立SQL JOIN关系。 然而,可能的是一个JdbcRowSet对象被添加到一个JoinRowSet如果必要的对象。

    可以将任意数量的RowSet对象添加到JoinRowSet的实例中,前提是它们可以在SQL JOIN 根据定义,SQL JOIN语句用于根据公共属性组合两个或多个关系数据库表中包含的数据。 Joinable接口提供了建立公共属性的方法,通过设置匹配列来完成。 匹配列通常与主键重合,但不要求匹配列与主键相同。 通过建立并执行列匹配, JoinRowSet对象在RowSet对象之间建立JOIN关系,而无需可用关系数据库的帮助。

    要建立的JOIN的类型通过使用方法setJoinType设置JoinRowSet常数之一来setJoinType 可以设置以下SQL JOIN类型:

    • CROSS_JOIN
    • FULL_JOIN
    • INNER_JOIN - 如果未设置JOIN类型, INNER_JOIN默认值
    • LEFT_OUTER_JOIN
    • RIGHT_OUTER_JOIN
    请注意,如果未设置任何类型, JOIN将自动成为内部JOIN JoinRowSet接口中字段的JoinRowSet解释了这些JOIN类型,它们是标准SQL JOIN类型。

    2.0使用JoinRowSet对象创建JOIN

    创建JoinRowSet对象时,它为空。 要添加的第一个RowSet对象成为JOIN关系的基础。 应用程序必须确定要添加到JoinRowSet对象的每个RowSet对象中的哪个列应该是匹配列。 所有RowSet对象都必须包含匹配列,并且每个匹配列中的值必须是可以与其他匹配列中的值进行比较的值。 列不必具有相同的名称,尽管它们经常这样做,并且只要可以比较数据类型,它们就不必存储完全相同的数据类型。

    匹配列可以通过两种方式设置:

    • 通过调用Joinable方法setMatchColumn
      这是在将RowSet对象添加到JoinRowSet对象之前可以设置匹配列的唯一方法。 RowSet对象必须已实现Joinable接口才能使用方法setMatchColumn 设置匹配列值后,可以使用此方法随时重置匹配列。
    • 通过调用JoinRowSet方法的一个版本addRowSet ,该方法采用列名或数字(或列名或数字的数组)
      五个addRowSet方法中的四个将匹配列作为参数。 这四种方法在将RowSet对象添加到JoinRowSet对象时设置或重置匹配列。

    3.0样本用法

    以下代码片段将两个CachedRowSet对象添加到JoinRowSet对象。 请注意,在此示例中,未设置SQL JOIN类型,因此将建立默认的JOIN类型,即INNER_JOIN

    在以下代码片段中,将其匹配列设置为第一列( EMP_ID )的表EMPLOYEES添加到JoinRowSet对象jrs中 然后添加表ESSP_BONUS_PLAN ,其匹配列同样是EMP_ID列。 当该第二表被添加到JRS,只有在排ESSP_BONUS_PLANEMP_ID值相匹配的EMP_ID在值EMPLOYEES加入表中。 在这种情况下,奖金计划中的每个人都是雇员,因此表ESSP_BONUS_PLAN中的所有行ESSP_BONUS_PLAN添加到JoinRowSet对象中。 在该示例中,添加的CachedRowSet对象都已经实现了Joinable接口,因此可以调用Joinable方法setMatchColumn

      JoinRowSet jrs = new JoinRowSetImpl();
    
         ResultSet rs1 = stmt.executeQuery("SELECT * FROM EMPLOYEES");
         CachedRowSet empl = new CachedRowSetImpl();
         empl.populate(rs1);
         empl.setMatchColumn(1);
         jrs.addRowSet(empl);
    
         ResultSet rs2 = stmt.executeQuery("SELECT * FROM ESSP_BONUS_PLAN");
         CachedRowSet bonus = new CachedRowSetImpl();
         bonus.populate(rs2);
         bonus.setMatchColumn(1); // EMP_ID is the first column
         jrs.addRowSet(bonus); 

    此时, jrs是基于EMP_ID列的两个RowSet对象的内部JOIN。 现在,应用程序可以浏览组合数据,就像浏览单个RowSet对象一样。 因为JRS本身是一个RowSet对象,应用程序可以导航或使用修改它RowSet方法。

      jrs.first();
         int employeeID = jrs.getInt(1);
         String employeeName = jrs.getString(2); 

    请注意,由于SQL JOIN当应用程序增加了第二个或后续必须执行RowSet对象而,有可能是在性能初始降解JOIN正在执行的。

    以下代码片段添加了另一个CachedRowSet对象。 在这种情况下,将CachedRowSet对象添加到JoinRowSet对象时,将设置匹配列( EMP_ID )。

      ResultSet rs3 = stmt.executeQuery("SELECT * FROM 401K_CONTRIB");
         CachedRowSet fourO1k = new CachedRowSetImpl();
         four01k.populate(rs3);
         jrs.addRowSet(four01k, 1); 

    JoinRowSet对象jrs现在包含来自所有三个表的值。 其中用于所述值在four01k每一行中的数据EMP_ID柱为相匹配的值EMP_IDJRS列已被添加到JRS。

    4.0 JoinRowSet方法

    JoinRowSet接口提供了几种方法来添加RowSet对象以及获取有关JoinRowSet对象的信息。
    • 添加一个或多个RowSet对象的方法
      这些方法允许应用程序一次添加一个对象RowSet或一次添加多个RowSet对象。 在任何一种情况下,方法都可RowSet要添加的每个RowSet对象指定匹配列。
    • 获取信息的方法
      一种方法检索RowSet对象中的JoinRowSet对象,另一种方法检索RowSet名称。 第三种方法检索在幕后使用的SQL WHERE子句以形成JOINWHERE子句的文本描述。
    • 方法相关的类型JOIN
      一种方法设置JOIN类型,五种方法确定JoinRowSet对象是否支持给定类型。
    • 一种制作JoinRowSet对象的单独副本的方法
      此方法创建可以持久保存到数据源的副本。
    从以下版本开始:
    1.5
    • 字段详细信息

      • CROSS_JOIN

        static final int CROSS_JOIN
        ANSI风格的 JOIN提供两个表的叉积
        另请参见:
        常数字段值
      • INNER_JOIN

        static final int INNER_JOIN
        ANSI样式的JOIN在两个表之间提供内部JOIN 应该丢弃连接表中任何不匹配的行。
        另请参见:
        常数字段值
      • LEFT_OUTER_JOIN

        static final int LEFT_OUTER_JOIN
        ANSI样式的JOIN在两个表之间提供左外连接。 在SQL中,描述了应该从JOIN语句的左侧返回所有记录的位置。
        另请参见:
        常数字段值
      • RIGHT_OUTER_JOIN

        static final int RIGHT_OUTER_JOIN
        ANSI样式的JOIN在两个表之间提供右外连接。 在SQL中,这描述了JOIN语句右侧表中的所有记录,即使左侧的表没有匹配的记录。
        另请参见:
        常数字段值
      • FULL_JOIN

        static final int FULL_JOIN
        ANSI风格的JOIN提供完整的JOIN。 指定返回任一表中的所有行,而不管其他表上的匹配记录。
        另请参见:
        常数字段值
    • 方法详细信息

      • addRowSet

        void addRowSet​(Joinable rowset)
                throws SQLException
        将给定的RowSet对象添加到此JoinRowSet对象。 如果RowSet对象是第一个添加到此JoinRowSet对象的对象,则它构成要建立的JOIN关系的基础。

        仅当给定的RowSet对象已具有使用Joinable方法setMatchColumn设置的匹配列时,才应使用此方法。

        注意: Joinable对象是已实现Joinable接口的任何RowSet对象。

        参数
        rowset -所述RowSet对象,它是要被添加到该JoinRowSet对象; 它必须实现Joinable接口并设置匹配列
        异常
        SQLException - 如果(1)向此 JoinRowSet对象添加空行集,(2)尚未为 行集设置匹配列,或(3) 行集违反活动 JOIN
        另请参见:
        Joinable.setMatchColumn(int)
      • addRowSet

        void addRowSet​(RowSet rowset,
                       int columnIdx)
                throws SQLException
        将给定的RowSet对象添加到此JoinRowSet对象,并将指定的列设置为RowSet对象的匹配列。 如果RowSet对象是第一个添加到此JoinRowSet对象的对象,则它构成要建立的JOIN关系的基础。

        RowSet尚未设置匹配列时,应使用此方法。

        参数
        rowset -所述RowSet对象,它是要被添加到该JoinRowSet对象; 它可以实现Joinable接口
        columnIdx - int ,用于标识要成为匹配列的列
        异常
        SQLException - if(1) rowset是空行集或(2) rowset违反活动 JOIN
        另请参见:
        Joinable.unsetMatchColumn(int)
      • addRowSet

        void addRowSet​(RowSet rowset,
                       String columnName)
                throws SQLException
        行集添加到此JoinRowSet对象,并将指定列设置为匹配列。 如果rowset是第一个添加到此JoinRowSet对象的行,则它构成了建立JOIN关系的基础。

        当给定的RowSet对象尚未具有匹配列时,应使用此方法。

        参数
        rowset -所述RowSet对象,它是要被添加到该JoinRowSet对象; 它可以实现Joinable接口
        columnName - String对象,其中包含要设置为匹配列的列的名称
        异常
        SQLException - if(1) rowset是空行集或(2) rowset的匹配列不满足 JOIN的条件
      • addRowSet

        void addRowSet​(RowSet[] rowset,
                       int[] columnIdx)
                throws SQLException
        将给定RowSet对象数组中包含的一个或多个RowSet对象添加到此JoinRowSet对象,并将每个RowSet对象的匹配列设置为给定列索引数组中的匹配列。 columnIdx第一元件被设置为匹配列第一RowSet行集对象,columnIdx的第二元件被设置为匹配列在行集的第二个元素,依此类推。

        添加到此JoinRowSet对象的第一个RowSet对象构成了JOIN关系的基础。

        当给定的RowSet对象尚未具有匹配列时,应使用此方法。

        参数
        rowset - 要添加到JOIN的一个或多个RowSet对象的JOIN ; 它可以实现Joinable接口
        columnIdx - 一个 int值的数组,指示要设置为 rowset中 RowSet对象的匹配列的列的 RowSet
        异常
        SQLException - 如果(1)向此 JoinRowSet对象添加空行集,(2)未为 集中的 RowSet对象设置匹配列,或(3)添加的 RowSet对象违反活动 JOIN
      • addRowSet

        void addRowSet​(RowSet[] rowset,
                       String[] columnName)
                throws SQLException
        将一个或多个RowSet包含的给定阵列中的对象RowSet对象此JoinRowSet对象,并为每一个的匹配列RowSet对象列名的给定阵列中的匹配列。 COLUMNNAME第一元件被设置为匹配列第一RowSet行集对象,COLUMNNAME的第二元件被设置为匹配列在行集的第二个元素,依此类推。

        添加到此JoinRowSet对象的第一个RowSet对象构成了JOIN关系的基础。

        当给定的RowSet对象尚未具有匹配列时,应使用此方法。

        参数
        rowset - 要添加到JOIN的一个或多个RowSet对象的JOIN ; 它可以实现Joinable接口
        columnName -的阵列 String值指示所述列的名称被设置为匹配列的 RowSet在对象 行集
        异常
        SQLException - 如果(1)将空行集添加到此 JoinRowSet对象,(2)未为 集中的 RowSet对象设置匹配列,或(3)正在添加的 RowSet对象违反活动 JOIN
      • getRowSets

        Collection<?> getRowSets()
                          throws SQLException
        返回Collection包含对象RowSet已经添加到该物体JoinRowSet对象。 这应该返回JOIN包含的'n'个RowSet,并保持在此union中发生的任何更新。
        结果
        Collection一个对象,由 RowSet对象添加到此 JoinRowSet对象组成
        异常
        SQLException - 如果发生错误,则生成要返回的 Collection对象
      • toCachedRowSet

        CachedRowSet toCachedRowSet()
                             throws SQLException
        创建一个新的CachedRowSet包含此数据对象JoinRowSet对象,它可以保存到使用数据源SyncProvider对象为CachedRowSet对象。

        如果对JoinRowSet应用了任何更新或修改,则该方法返回的CachedRowSet将无法将其更改保留回数据源中的原始行和表。 返回的CachedRowSet实例不应包含修改数据,它应该清除它的原始SQL语句的所有属性。 应用程序应使用RowSet.setCommand方法重置SQL语句。

        为了允许更改持久化回原始表的数据源,应在JoinRowSet对象实例上使用和调用acceptChanges方法。 实现可以利用其实现中的内部数据和更新跟踪来与SyncProvider交互以保持任何更改。

        结果
        包含JoinRowSet内容的CachedRowSet
        异常
        SQLException - 如果组装CachedRowSet对象时发生错误
        另请参见:
        RowSetCachedRowSetSyncProvider
      • supportsCrossJoin

        boolean supportsCrossJoin()
        指示JoinRowSet实现是否支持CROSS_JOIN
        结果
        如果支持CROSS_JOIN,则为true;否则为false。 否则是假的
      • supportsInnerJoin

        boolean supportsInnerJoin()
        指示JoinRowSet实现是否支持INNER_JOIN
        结果
        true表示支持INNER_JOIN; 否则是假的
      • supportsLeftOuterJoin

        boolean supportsLeftOuterJoin()
        指示JoinRowSet实现是否支持LEFT_OUTER_JOIN
        结果
        true表示支持LEFT_OUTER_JOIN; 否则是假的
      • supportsRightOuterJoin

        boolean supportsRightOuterJoin()
        指示JoinRowSet实现是否支持RIGHT_OUTER_JOIN
        结果
        true表示支持RIGHT_OUTER_JOIN; 否则是假的
      • supportsFullJoin

        boolean supportsFullJoin()
        指示JoinRowSet实现是否支持FULL_JOIN
        结果
        true表示支持FULL_JOIN; 否则是假的
      • setJoinType

        void setJoinType​(int joinType)
                  throws SQLException
        允许应用程序调整对JoinRowSet对象实例中包含的表施加的JOIN的类型。 如果实现不支持给定的JOIN类型,则应该抛出SQLException。
        参数
        joinType - SQL JOIN的标准JoinRowSet.XXX静态字段定义,用于在 JOIN时重新配置JoinRowSet实例。
        异常
        SQLException - 如果设置了不支持的 JOIN类型
        另请参见:
        getJoinType()
      • getWhereClause

        String getWhereClause()
                       throws SQLException
        返回在JoinRowSet对象中使用的WHERE子句的类似SQL的描述。 实现可以描述SQL的WHERE子句JOIN通过提供的SQL字符串描述JOIN或提供的文字说明,以帮助使用应用程序JoinRowSet
        结果
        whereClause JoinRowSet实例中使用的逻辑WHERE子句的文本或SQL描述
        异常
        SQLException - 如果在生成WHERE子句的表示时发生错误。
      • getJoinType

        int getJoinType()
                 throws SQLException
        返回int描述管理此JoinRowSet实例的集合SQL JOIN类型。 返回的类型将是标准JoinRowSet中类型之一: CROSS_JOININNER_JOINLEFT_OUTER_JOINRIGHT_OUTER_JOINFULL_JOIN
        结果
        joinType SQL JOIN的标准JoinRowSet静态字段定义之一。 JoinRowSet.INNER_JOIN作为默认值返回JOIN类型,未显式设置任何类型。
        异常
        SQLException - 如果发生错误,确定JoinRowSet实例支持的SQL JOIN类型。
        另请参见:
        setJoinType(int)