Module java.sql.rowset
Package javax.sql.rowset

Interface Joinable

已知的所有子接口:
CachedRowSet, FilteredRowSet, JdbcRowSet, JoinRowSet, WebRowSet

public interface Joinable

1.0 背景

Joinable接口提供了用于获取和设置匹配列的方法,这是形成SQL JOIN的基础,通过将RowSet对象添加到JoinRowSet对象中形成。

任何标准的RowSet实现可以实现Joinable接口,以便将其添加到JoinRowSet对象中。实现此接口使RowSet对象能够使用Joinable方法,这些方法设置、检索和获取有关匹配列的信息。应用程序可以将未实现Joinable接口的RowSet对象添加到JoinRowSet对象中,但必须使用其中一个接受RowSet对象和匹配列或RowSet对象数组和匹配列数组的JoinRowSet.addRowSet方法。

要访问Joinable接口中的方法,RowSet对象至少实现五个标准的RowSet接口之一,并且还实现Joinable接口。此外,大多数RowSet对象扩展了BaseRowSet类。例如:

     class MyRowSetImpl extends BaseRowSet implements CachedRowSet, Joinable {
         :
         :
     }
 

2.0 使用指南

Joinable接口中的方法允许RowSet对象设置匹配列、检索匹配列或取消匹配列,这是SQL JOIN的基础。实现这些方法的类的实例可以添加到JoinRowSet对象中,以建立SQL JOIN关系。

     CachedRowSet crs = new MyRowSetImpl();
     crs.populate((ResultSet)rs);
     ((Joinable)crs).setMatchColumnIndex(1);

     JoinRowSet jrs = new JoinRowSetImpl();
     jrs.addRowSet(crs);
 
在上面的示例中,crs是一个实现了Joinable接口的CachedRowSet对象。在下面的示例中,crs2没有实现,因此必须将匹配列作为参数提供给addRowSet方法。此示例假定列1是匹配列。
     CachedRowSet crs2 = new MyRowSetImpl();
     crs2.populate((ResultSet)rs);

     JoinRowSet jrs2 = new JoinRowSetImpl();
     jrs2.addRowSet(crs2, 1);
 

JoinRowSet接口使得可以从一个或多个RowSet对象中检索数据并合并到一个表中,而无需创建到数据库的连接。因此,它非常适合由断开连接的RowSet对象使用。然而,任何RowSet对象可以实现此接口,无论它是连接的还是断开的。请注意,始终连接到其数据源的JdbcRowSet对象可以直接成为SQL JOIN的一部分,而无需成为JoinRowSet对象的一部分。

3.0 管理多个匹配列

传递给setMatchColumn方法的索引数组指示正在设置的匹配列数量(数组的长度),以及将用于匹配的列。例如:
     int[] i = {1, 2, 4, 7}; // 表示四个匹配列,列索引为1、2、4、7参与JOIN。
     Joinable.setMatchColumn(i);
 
可以如下添加后续匹配列到另一个实现了Joinable接口的RowSet对象。
     int[] w = {3, 2, 5, 3};
     Joinable2.setMatchColumn(w);
 
当应用程序将两个或多个RowSet对象添加到JoinRowSet对象时,数组中的索引顺序尤为重要。数组的每个索引直接映射到先前添加的RowSet对象的相应索引。如果发生重叠或不足,匹配列数据将在添加额外的Joinable RowSet并需要与匹配列数据相关联时保持不变。因此,应用程序可以以任何顺序设置多个匹配列,但此顺序直接影响SQL JOIN的结果。

当使用列名而不是列索引指示匹配列时,此断言以完全相同的方式适用。

自版本:
1.5
参见:
  • Method Summary

    Modifier and Type
    Method
    Description
    int[]
    检索为此RowSet对象使用setMatchColumn(int[] columnIdxes)方法设置的匹配列的索引。
    String[]
    检索为此RowSet对象使用setMatchColumn(String [] columnNames)方法设置的匹配列的名称。
    void
    setMatchColumn(int columnIdx)
    为此RowSet对象设置指定的列作为匹配列。
    void
    setMatchColumn(int[] columnIdxes)
    为此RowSet对象设置指定的列作为匹配列。
    void
    setMatchColumn(String columnName)
    为此RowSet对象设置指定的列作为匹配列。
    void
    setMatchColumn(String[] columnNames)
    为此RowSet对象设置指定的列作为匹配列。
    void
    unsetMatchColumn(int columnIdx)
    取消为此RowSet对象设置的指定列作为匹配列。
    void
    unsetMatchColumn(int[] columnIdxes)
    取消为此RowSet对象设置的指定列作为匹配列。
    void
    unsetMatchColumn(String columnName)
    取消为此RowSet对象设置的指定列作为匹配列。
    void
    unsetMatchColumn(String[] columnName)
    取消为此RowSet对象设置的指定列作为匹配列。
  • Method Details

    • setMatchColumn

      void setMatchColumn(int columnIdx) throws SQLException
      为此RowSet对象设置指定的列作为匹配列。现在,JoinRowSet对象可以根据匹配列添加此RowSet对象。

      诸如CachedRowSet接口之类的子接口定义了CachedRowSet.setKeyColumns方法,允许在特定列上强制执行主键语义。实现setMatchColumn(int columnIdx)方法的类应确保在CachedRowSet对象将主键列设置为匹配列时,对关键列的约束得到维护。

      参数:
      columnIdx - 一个标识要设置为匹配列的列的索引的int
      抛出:
      SQLException - 如果设置了无效的列索引
      参见:
    • setMatchColumn

      void setMatchColumn(int[] columnIdxes) throws SQLException
      为此RowSet对象设置指定的列作为匹配列。现在,JoinRowSet对象可以根据匹配列添加此RowSet对象。
      参数:
      columnIdxes - 一个int数组,标识要设置为匹配列的列的索引
      抛出:
      SQLException - 如果设置了无效的列索引
      参见:
    • setMatchColumn

      void setMatchColumn(String columnName) throws SQLException
      为此RowSet对象设置指定的列作为匹配列。现在,JoinRowSet对象可以根据匹配列添加此RowSet对象。

      诸如CachedRowSet接口之类的子接口定义了CachedRowSet.setKeyColumns方法,允许在特定列上强制执行主键语义。实现setMatchColumn(String columnIdx)方法的类应确保在CachedRowSet对象将主键列设置为匹配列时,对关键列的约束得到维护。

      参数:
      columnName - 一个String对象,给出要设置为匹配列的列的名称
      抛出:
      SQLException - 如果设置了无效的列名、列名为null或列名为空字符串
      参见:
    • setMatchColumn

      void setMatchColumn(String[] columnNames) throws SQLException
      为此RowSet对象设置指定的列作为匹配列。现在,JoinRowSet对象可以根据匹配列添加此RowSet对象。
      参数:
      columnNames - 一个String对象数组,给出要设置为匹配列的列的名称
      抛出:
      SQLException - 如果设置了无效的列名、列名为null或列名为空字符串
      参见:
    • getMatchColumnIndexes

      int[] getMatchColumnIndexes() throws SQLException
      检索为此RowSet对象使用setMatchColumn(int[] columnIdxes)方法设置的匹配列的索引。
      返回值:
      一个int数组,标识为此RowSet对象设置为匹配列的索引
      抛出:
      SQLException - 如果未设置匹配列
      参见:
    • getMatchColumnNames

      String[] getMatchColumnNames() throws SQLException
      使用方法setMatchColumn(String [] columnNames)为此RowSet对象设置的匹配列的名称。
      返回值:
      一个String对象数组,给出此RowSet对象设置为匹配列的列名
      抛出:
      SQLException - 如果未设置匹配列
      参见:
    • unsetMatchColumn

      void unsetMatchColumn(int columnIdx) throws SQLException
      取消为此RowSet对象设置的指定列作为匹配列。

      实现Joinable接口的RowSet对象必须确保在调用指定列上的方法CachedRowSet.unsetKeyColumns之前继续执行类似键的约束。

      参数:
      columnIdx - 一个int,标识要取消设置为匹配列的列的索引
      抛出:
      SQLException - 如果指定了无效的列索引或指定列之前未设置为匹配列
      参见:
    • unsetMatchColumn

      void unsetMatchColumn(int[] columnIdxes) throws SQLException
      取消为此RowSet对象设置的指定列作为匹配列。
      参数:
      columnIdxes - 一个int数组,标识要取消设置为匹配列的列的索引
      抛出:
      SQLException - 如果指定了无效的列索引或指定列之前未设置为匹配列
      参见:
    • unsetMatchColumn

      void unsetMatchColumn(String columnName) throws SQLException
      取消为此RowSet对象设置的指定列作为匹配列。

      实现Joinable接口的RowSet对象必须确保在调用指定列上的方法CachedRowSet.unsetKeyColumns之前继续执行类似键的约束。

      参数:
      columnName - 一个String对象,给出要取消设置为匹配列的列名
      抛出:
      SQLException - 如果指定了无效的列名或指定列之前未设置为匹配列
      参见:
    • unsetMatchColumn

      void unsetMatchColumn(String[] columnName) throws SQLException
      取消为此RowSet对象设置的指定列作为匹配列。
      参数:
      columnName - 一个String对象数组,给出要取消设置为匹配列的列名
      抛出:
      SQLException - 如果指定了无效的列名或指定列之前未设置为匹配列
      参见: