- 已知的所有子接口:
-
CachedRowSet,FilteredRowSet,JdbcRowSet,JoinRowSet,WebRowSet
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 TypeMethodDescriptionint[]检索为此RowSet对象使用setMatchColumn(int[] columnIdxes)方法设置的匹配列的索引。String[]检索为此RowSet对象使用setMatchColumn(String [] columnNames)方法设置的匹配列的名称。voidsetMatchColumn(int columnIdx) 为此RowSet对象设置指定的列作为匹配列。voidsetMatchColumn(int[] columnIdxes) 为此RowSet对象设置指定的列作为匹配列。voidsetMatchColumn(String columnName) 为此RowSet对象设置指定的列作为匹配列。voidsetMatchColumn(String[] columnNames) 为此RowSet对象设置指定的列作为匹配列。voidunsetMatchColumn(int columnIdx) 取消为此RowSet对象设置的指定列作为匹配列。voidunsetMatchColumn(int[] columnIdxes) 取消为此RowSet对象设置的指定列作为匹配列。voidunsetMatchColumn(String columnName) 取消为此RowSet对象设置的指定列作为匹配列。voidunsetMatchColumn(String[] columnName) 取消为此RowSet对象设置的指定列作为匹配列。
-
Method Details
-
setMatchColumn
为此RowSet对象设置指定的列作为匹配列。现在,JoinRowSet对象可以根据匹配列添加此RowSet对象。诸如
CachedRowSet接口之类的子接口定义了CachedRowSet.setKeyColumns方法,允许在特定列上强制执行主键语义。实现setMatchColumn(int columnIdx)方法的类应确保在CachedRowSet对象将主键列设置为匹配列时,对关键列的约束得到维护。- 参数:
-
columnIdx- 一个标识要设置为匹配列的列的索引的int - 抛出:
-
SQLException- 如果设置了无效的列索引 - 参见:
-
setMatchColumn
为此RowSet对象设置指定的列作为匹配列。现在,JoinRowSet对象可以根据匹配列添加此RowSet对象。- 参数:
-
columnIdxes- 一个int数组,标识要设置为匹配列的列的索引 - 抛出:
-
SQLException- 如果设置了无效的列索引 - 参见:
-
setMatchColumn
为此RowSet对象设置指定的列作为匹配列。现在,JoinRowSet对象可以根据匹配列添加此RowSet对象。诸如
CachedRowSet接口之类的子接口定义了CachedRowSet.setKeyColumns方法,允许在特定列上强制执行主键语义。实现setMatchColumn(String columnIdx)方法的类应确保在CachedRowSet对象将主键列设置为匹配列时,对关键列的约束得到维护。- 参数:
-
columnName- 一个String对象,给出要设置为匹配列的列的名称 - 抛出:
-
SQLException- 如果设置了无效的列名、列名为null或列名为空字符串 - 参见:
-
setMatchColumn
为此RowSet对象设置指定的列作为匹配列。现在,JoinRowSet对象可以根据匹配列添加此RowSet对象。- 参数:
-
columnNames- 一个String对象数组,给出要设置为匹配列的列的名称 - 抛出:
-
SQLException- 如果设置了无效的列名、列名为null或列名为空字符串 - 参见:
-
getMatchColumnIndexes
检索为此RowSet对象使用setMatchColumn(int[] columnIdxes)方法设置的匹配列的索引。- 返回值:
-
一个
int数组,标识为此RowSet对象设置为匹配列的索引 - 抛出:
-
SQLException- 如果未设置匹配列 - 参见:
-
getMatchColumnNames
使用方法setMatchColumn(String [] columnNames)为此RowSet对象设置的匹配列的名称。- 返回值:
-
一个
String对象数组,给出此RowSet对象设置为匹配列的列名 - 抛出:
-
SQLException- 如果未设置匹配列 - 参见:
-
unsetMatchColumn
取消为此RowSet对象设置的指定列作为匹配列。实现
Joinable接口的RowSet对象必须确保在调用指定列上的方法CachedRowSet.unsetKeyColumns之前继续执行类似键的约束。- 参数:
-
columnIdx- 一个int,标识要取消设置为匹配列的列的索引 - 抛出:
-
SQLException- 如果指定了无效的列索引或指定列之前未设置为匹配列 - 参见:
-
unsetMatchColumn
取消为此RowSet对象设置的指定列作为匹配列。- 参数:
-
columnIdxes- 一个int数组,标识要取消设置为匹配列的列的索引 - 抛出:
-
SQLException- 如果指定了无效的列索引或指定列之前未设置为匹配列 - 参见:
-
unsetMatchColumn
取消为此RowSet对象设置的指定列作为匹配列。实现
Joinable接口的RowSet对象必须确保在调用指定列上的方法CachedRowSet.unsetKeyColumns之前继续执行类似键的约束。- 参数:
-
columnName- 一个String对象,给出要取消设置为匹配列的列名 - 抛出:
-
SQLException- 如果指定了无效的列名或指定列之前未设置为匹配列 - 参见:
-
unsetMatchColumn
取消为此RowSet对象设置的指定列作为匹配列。- 参数:
-
columnName- 一个String对象数组,给出要取消设置为匹配列的列名 - 抛出:
-
SQLException- 如果指定了无效的列名或指定列之前未设置为匹配列 - 参见:
-