Module  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对象)鼓励使用数据库它们已经连接到SQL建立JOIN直接表之间的关系。 然而,可能的是一个JdbcRowSet对象被添加到一个JoinRowSet ,如果必要的对象。

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

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

    • CROSS_JOIN
    • FULL_JOIN
    • INNER_JOIN - 如果没有设置JOIN类型, INNER_JOIN默认值
    • LEFT_OUTER_JOIN
    • RIGHT_OUTER_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对象中的JoinRowSet对象,另一种方法检索RowSet名称。 第三种方法检索幕后使用的SQL WHERE子句以形成JOINWHERE子句的文本描述。
    • 方法相关类型JOIN
      一种方法设置JOIN类型,五种方法查找JoinRowSet对象是否支持给定类型。
    • 制作JoinRowSet对象的单独副本的方法
      此方法创建可以持久保存到数据源的副本。
    从以下版本开始:
    1.5
    • 字段详细信息

      • CROSS_JOIN

        static final int CROSS_JOIN
        ANSI-style JOIN提供两个表的交叉产品
        另请参见:
        Constant Field Values
      • INNER_JOIN

        static final int INNER_JOIN
        ANSI样式的JOIN提供两个表之间的内部连接。 连接任一表中的任何不匹配的行都应该被丢弃。
        另请参见:
        Constant Field Values
      • LEFT_OUTER_JOIN

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

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

        static final int FULL_JOIN
        ANSI样式的JOIN提供了完整的JOIN。 指定来自任何一个表的所有行,而不管其他表上的匹配记录如何。
        另请参见:
        Constant Field Values
    • 方法详细信息

      • 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 - 如果(1) 行集是空的行集或(2) 行集违反了活动 JOIN
        另请参见:
        Joinable.unsetMatchColumn(int)
      • addRowSet

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

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

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

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

        RowSet对象添加到此JoinRowSet对象中形成JOIN关系的基础。

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

        参数
        rowset - 要添加到JOIN的一个或多个RowSet对象的JOIN ; 它可以实现Joinable接口
        columnIdx - 一个 int值的数组,表示要设置为 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的第二元件被设置为匹配列在行集的第二个元素,依此类推。

        RowSet对象添加到这个JoinRowSet对象中形成JOIN关系的基础。

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

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

        Collection<?> getRowSets​()
                          throws SQLException
        返回Collection包含对象RowSet已经添加到该物体JoinRowSet对象。 这应该返回JOIN包含的RowSet的“n”数,并保留在此联合中发生的任何更新。
        结果
        一个 Collection由所述的对象 RowSet对象加入到这一 JoinRowSet对象
        异常
        SQLException - 如果发生错误,生成要返回的 Collection对象
      • getRowSetNames

        String[] getRowSetNames​()
                         throws SQLException
        返回一个 String数组,其中包含添加到此 JoinRowSet对象的 RowSet对象的名称。
        结果
        一个 String数组的 RowSet对象的名称在这 JoinRowSet对象
        异常
        SQLException - 如果检索 RowSet对象的名称发生错误
        另请参见:
        CachedRowSet.setTableName(java.lang.String)
      • 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​()
        指示CROSS_JOIN是否由JoinRowSet实现支持
        结果
        如果支持CROSS_JOIN则为true; 否则为假
      • supportsInnerJoin

        boolean supportsInnerJoin​()
        指示JoinRowSet实现是否支持INNER_JOIN
        结果
        真正的是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
        结果
        真的是支持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描述一组SQL JOIN类型此JoinRowSet实例。 返回的类型将是标准JoinRowSet中类型之一: CROSS_JOININNER_JOINLEFT_OUTER_JOINRIGHT_OUTER_JOINFULL_JOIN
        结果
        joinType是SQL JOIN的标准JoinRowSet静态字段定义之一。 JoinRowSet.INNER_JOIN返回默认为JOIN类型是没有类型已被明确设置。
        异常
        SQLException - 如果发生错误,确定由JoinRowSet实例支持的SQL JOIN类型。
        另请参见:
        setJoinType(int)