public interface JoinRowSet
JoinRowSet
接口提供了一种机制,用于将取自不同 RowSet
对象的相关数据组合到一个 JoinRowSet
对象中,该对象表示一个 SQL JOIN
。换句话说,JoinRowSet
对象可作为一个数据容器,这些数据取自那些形成 SQL JOIN
关系的 RowSet
对象。
Joinable
接口提供了一些用于设置、获取和取消设置匹配列的方法,匹配列建立 SQL JOIN
关系的基础。通过将匹配列提供给恰当形式的 JointRowSet
方法 addRowSet
也可设置匹配列。
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
对象可在 RowSet
对象之间建立 JOIN
关系,无需可用关系型数据库的协助。
可通过使用方法 setJoinType
设置某个 JoinRowSet
常量来确定要建立的 JOIN
的类型。可设置以下 SQL JOIN
类型:
CROSS_JOIN
FULL_JOIN
INNER_JOIN
- 未设置 JOIN
类型时使用的默认值 LEFT_OUTER_JOIN
RIGHT_OUTER_JOIN
JOIN
将自动为 INNER_JOIN。
JoinRowSet
接口中各字段的注释说明了这些
JOIN
类型,它们都是标准的 SQL
JOIN
类型。
JoinRowSet
对象创建 JOIN
JoinRowSet
对象时,它是空的。要添加的第一个
RowSet
对象将成为
JOIN
关系的基础。应用程序必须确定在要添加到
JoinRowSet
对象的每个
RowSet
对象中,哪个列应该是匹配列。所有的
RowSet
对象必须包含匹配列,并且每个匹配列中的值必须可以与其他匹配列中的值相比较。这些列不必有相同的名称(虽然通常它们的名称相同),只要数据类型是可比较的,它们也不必存储完全相同的数据类型。
可用两种方式来设置匹配列:
Joinable
的方法 setMatchColumn
RowSet
对象添加到 JoinRowSet
对象之前,这是可以设置匹配列的唯一方法。为了使用方法 setMatchColumn
,RowSet
对象必须已经实现了 Joinable
接口。一旦设置了匹配列值,则可在任意时间使用此方法来重置匹配列。 JoinRowSet
方法 addRowSet
(使用列名或列号,或者列名数组或列号数组)addRowSet
方法中有 4 个采用匹配列作为参数。这 4 个方法可在将 RowSet
对象添加到 JoinRowSet
对象时设置或重置匹配列。 以下代码片断将两个 CachedRowSet
对象添加到 JoinRowSet
对象中。注意,在此示例中未设置 SQL JOIN
类型,所以建立了默认的 JOIN
类型,即 INNER_JOIN。
在以下代码片断中,表 EMPLOYEES
被添加到 JoinRowSet
对象 jrs 中,该表的匹配列被设置为第一列 (EMP_ID
)。然后添加表 ESSP_BONUS_PLAN
,其匹配列同样是 EMP_ID
列。将第二个表添加到 jrs 时,只添加 EMP_ID
值匹配 EMPLOYEES
表 EMP_ID
值的 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 是两个 RowSet
对象基于其 EMP_ID
列的内部 JOIN。应用程序现在可以浏览已组合的数据,就好像在浏览单个 RowSet
对象一样。因为 jrs 本身是一个 RowSet
对象,所以应用程序可以使用 RowSet
方法浏览或修改它。
jrs.first(); int employeeID = jrs.getInt(1); String employeeName = jrs.getString(2);
注意,因为在应用程序添加第二个或后续 RowSet
对象时必须强制执行 SQL JOIN
,所以在执行 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 现在包含取自所有三个表的值。EMP_ID
列值匹配 jrs 中 EMP_ID
列值的 four01k 中的每行数据都被添加到 jrs。
JoinRowSet
方法JoinRowSet
接口提供了多种方法用于添加
RowSet
对象和获得有关
JoinRowSet
对象的信息。
RowSet
对象的方法RowSet
对象,或者一次添加多个 RowSet
对象。无论是哪种情况,该方法可以为要添加的每个 RowSet
对象指定匹配列。 JoinRowSet
对象中的 RowSet
对象,另一个方法获取 RowSet
名称。第三个方法获取后台使用以形成 SQL JOIN
的 WHERE
子句,或者有关 WHERE
子句作用的文本描述。 JOIN
类型有关的方法JOIN
类型,5 个方法用于查找 JoinRowSet
对象是否支持给定的类型。 JoinRowSet
对象单独副本的方法
字段摘要 | |
---|---|
static int |
CROSS_JOIN ANSI 风格的 JOIN ,提供两个表的交叉乘积。 |
static int |
FULL_JOIN ANSI 风格的 JOIN ,提供一个完全 JOIN。 |
static int |
INNER_JOIN ANSI 风格的 JOIN ,提供两个表之间的内联合 (inner join)。 |
static int |
LEFT_OUTER_JOIN ANSI 风格的 JOIN ,提供两个表之间的左外联合 (left outer join)。 |
static int |
RIGHT_OUTER_JOIN ANSI 风格的 JOIN ,提供两个表之间的右外联合 (right outer join)。 |
从接口 javax.sql.rowset.WebRowSet 继承的字段 |
---|
PUBLIC_XML_SCHEMA, SCHEMA_SYSTEM_ID |
从接口 javax.sql.rowset.CachedRowSet 继承的字段 |
---|
COMMIT_ON_ACCEPT_CHANGES |
方法摘要 | |
---|---|
void |
addRowSet(Joinable rowset) 将给定的 RowSet 对象添加到此 JoinRowSet 对象。 |
void |
addRowSet(RowSet[] rowset, int[] columnIdx) 将给定 RowSet 对象数组中包含的一个或多个 RowSet 对象添加到此 JoinRowSet 对象,并且将每个 RowSet 对象的匹配列设置为给定列索引数组中的匹配列。 |
void |
addRowSet(RowSet[] rowset, String[] columnName) 将给定 RowSet 对象数组中包含的一个或多个 RowSet 对象添加到此 JoinRowSet 对象,并且将每个 RowSet 对象的匹配列设置为给定列名数组中的匹配列。 |
void |
addRowSet(RowSet rowset, int columnIdx) 将给定的 RowSet 对象添加到此 JoinRowSet 对象,并将指定的列设置为 RowSet 对象的匹配列。 |
void |
addRowSet(RowSet rowset, String columnName) 将 rowset 添加到此 JoinRowSet 对象,并将指定的列设置为匹配列。 |
int |
getJoinType() 返回一个 int 值,它描述控制此 JoinRowSet 实例的已设置 SQL JOIN 类型。 |
String[] |
getRowSetNames() 返回一个 String 数组,包含添加到此 JoinRowSet 对象的 RowSet 对象的名称。 |
Collection<?> |
getRowSets() 返回一个 Collection 对象,包含已经添加到此 JoinRowSet 对象的 RowSet 对象。 |
String |
getWhereClause() 返回在 JoinRowSet 对象中使用的 WHERE 子句的类似 SQL 的描述。 |
void |
setJoinType(int joinType) 允许应用程序调整在 JoinRowSet 对象实例包含的表上强制应用的 JOIN 类型。 |
boolean |
supportsCrossJoin() 指示 JoinRowSet 实现是否支持 CROSS_JOIN。 |
boolean |
supportsFullJoin() 指示 JoinRowSet 实现是否支持 FULL_JOIN。 |
boolean |
supportsInnerJoin() 指示 JoinRowSet 实现是否支持 INNER_JOIN。 |
boolean |
supportsLeftOuterJoin() 指示 JoinRowSet 实现是否支持 LEFT_OUTER_JOIN。 |
boolean |
supportsRightOuterJoin() 指示 JoinRowSet 实现是否支持 RIGHT_OUTER_JOIN。 |
CachedRowSet |
toCachedRowSet() 创建一个包含此 JoinRowSet 对象中数据的新 CachedRowSet 对象,可以使用 CachedRowSet 对象的 SyncProvider 对象将此 JoinRowSet 对象保存到数据源。 |
从接口 javax.sql.rowset.WebRowSet 继承的方法 |
---|
readXml, readXml, writeXml, writeXml, writeXml, writeXml |
从接口 java.sql.Wrapper 继承的方法 |
---|
isWrapperFor, unwrap |
从接口 javax.sql.rowset.Joinable 继承的方法 |
---|
getMatchColumnIndexes, getMatchColumnNames, setMatchColumn, setMatchColumn, setMatchColumn, setMatchColumn, unsetMatchColumn, unsetMatchColumn, unsetMatchColumn, unsetMatchColumn |
字段详细信息 |
---|
static final int CROSS_JOIN
JOIN
,提供两个表的交叉乘积。
static final int INNER_JOIN
JOIN
,提供两个表之间的内联合 (inner join)。任一联合表中的所有不匹配列都应被丢弃。
static final int LEFT_OUTER_JOIN
JOIN
,提供两个表之间的左外联合 (left outer join)。在 SQL 中,这可描述为应该从 JOIN 语句左侧表中返回所有记录的情况。
static final int RIGHT_OUTER_JOIN
JOIN
,提供两个表之间的右外联合 (right outer join)。在 SQL 中,这可描述为即使左侧的表没有匹配记录的情况下也应该从 JOIN 语句右侧表中返回所有记录的情况。
static final int FULL_JOIN
JOIN
,提供一个完全 JOIN。指定不管在另一个表上是否有匹配的记录,都会返回任一表中的所有行。
方法详细信息 |
---|
void addRowSet(Joinable rowset) throws SQLException
RowSet
对象添加到此
JoinRowSet
对象。如果该
RowSet
对象是第一个添加到此
JoinRowSet
对象中的对象,则它形成要建立的
JOIN
关系的基础。
仅在给定的 RowSet
对象已经具有使用 Joinable
方法 setMatchColumn
所设置的匹配列时才应该使用此方法。
注:Joinable
是所有已经实现了 Joinable
接口的 RowSet
对象。
rowset
- 要添加到此
JoinRowSet
对象的
RowSet
对象;它必须实现
Joinable
接口并且具有已设置的匹配列
SQLException
- 如果 (1) 将空的