- 所有父级接口:
AutoCloseable,CachedRowSet,Joinable,ResultSet,RowSet,WebRowSet,Wrapper
JoinRowSet 接口提供了一种机制,用于将来自不同 RowSet 对象的相关数据组合到一个 JoinRowSet 对象中,它代表一个 SQL JOIN 。换句话说,JoinRowSet 对象充当来自 RowSet 对象的数据的容器,这些对象形成 SQL JOIN 关系。
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 对象在 RowSet 对象之间建立 JOIN 关系,而无需可用关系数据库的帮助。
要建立的 JOIN 类型是通过使用方法 setJoinType 设置 JoinRowSet 常量之一来确定的。可以设置以下 SQL JOIN 类型:
CROSS_JOINFULL_JOININNER_JOIN- 如果未设置JOIN类型则为默认值LEFT_OUTER_JOINRIGHT_OUTER_JOIN
JOIN 将自动成为内部联接。 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_PLAN 中其 EMP_ID 值与 EMPLOYEES 表中的 EMP_ID 值匹配的行。在本例中,奖金计划中的每个人都是雇员,因此表 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 对象。在这种情况下,匹配列 (EMP_ID) 在将 CachedRowSet 对象添加到 JoinRowSet 对象时设置。
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_ID 列的值匹配jrs已添加到jrs.
4.0JoinRowSet方法
JoinRowSet 接口提供了几种方法来添加 RowSet 对象和获取有关 JoinRowSet 对象的信息。
- 添加一个或多个
RowSet对象的方法
这些方法允许应用程序一次添加一个RowSet对象或一次添加多个RowSet对象。在任何一种情况下,这些方法都可以为添加的每个RowSet对象指定匹配列。 - 获取信息的方法
一种方法检索JoinRowSet对象中的RowSet对象,另一种方法检索RowSet名称。第三种方法检索在幕后用于形成JOIN的 SQLWHERE子句或WHERE子句的作用的文本描述。 JOIN类型相关的方法
一种方法设置JOIN类型,五种方法确定JoinRowSet对象是否支持给定类型。- 制作
JoinRowSet对象的单独副本的方法
此方法创建一个可以持久保存到数据源的副本。
- 自从:
- 1.5
-
字段摘要
字段修饰符和类型Field描述static final intANSI 风格的JOIN提供两个表的叉积static final int提供完整 JOIN 的 ANSI 样式JOIN。static final intANSI 样式JOIN提供两个表之间的内部连接。static final int一个 ANSI 风格的JOIN提供两个表之间的左外连接。static final intANSI 风格的JOIN提供两个表之间的右外连接。在接口 javax.sql.rowset.CachedRowSet 中声明的字段
COMMIT_ON_ACCEPT_CHANGES在接口 java.sql.ResultSet 中声明的字段
CLOSE_CURSORS_AT_COMMIT, CONCUR_READ_ONLY, CONCUR_UPDATABLE, FETCH_FORWARD, FETCH_REVERSE, FETCH_UNKNOWN, HOLD_CURSORS_OVER_COMMIT, TYPE_FORWARD_ONLY, TYPE_SCROLL_INSENSITIVE, TYPE_SCROLL_SENSITIVE在接口 javax.sql.rowset.WebRowSet 中声明的字段
PUBLIC_XML_SCHEMA, SCHEMA_SYSTEM_ID -
方法总结
修饰符和类型方法描述void将给定RowSet对象数组中包含的一个或多个RowSet对象添加到此JoinRowSet对象,并将每个RowSet对象的匹配列设置为给定列索引数组中的匹配列。void将给定RowSet对象数组中包含的一个或多个RowSet对象添加到此JoinRowSet对象,并将每个RowSet对象的匹配列设置为给定列名数组中的匹配列。void将给定的RowSet对象添加到此JoinRowSet对象。void将给定的RowSet对象添加到此JoinRowSet对象并将指定列设置为RowSet对象的匹配列。void添加行集到这个JoinRowSet对象并将指定的列设置为匹配列。int返回一个int描述管理此 JoinRowSet 实例的集合 SQLJOIN类型。String[]返回一个String数组,其中包含添加到此JoinRowSet对象的RowSet对象的名称。Collection<?>返回一个Collection对象,其中包含已添加到此JoinRowSet对象的RowSet对象。返回在 JoinRowSet 对象中使用的 WHERE 子句的类似 SQL 的描述。voidsetJoinType(int joinType) 允许应用程序调整对包含在 JoinRowSet 对象实例中的表施加的JOIN类型。boolean指示 JoinRowSet 实现是否支持 CROSS_JOINboolean指示 JoinRowSet 实现是否支持 FULL_JOINboolean指示 INNER_JOIN 是否受 JoinRowSet 实现支持boolean指示 LEFT_OUTER_JOIN 是否受 JoinRowSet 实现支持boolean指示 JoinRowSet 实现是否支持 RIGHT_OUTER_JOIN创建一个包含此JoinRowSet对象中数据的新CachedRowSet对象,可以使用CachedRowSet对象的SyncProvider对象将其保存到数据源。在接口 javax.sql.rowset.CachedRowSet 中声明的方法
acceptChanges, acceptChanges, columnUpdated, columnUpdated, commit, createCopy, createCopyNoConstraints, createCopySchema, createShared, execute, getKeyColumns, getOriginal, getOriginalRow, getPageSize, getRowSetWarnings, getShowDeleted, getSyncProvider, getTableName, nextPage, populate, populate, previousPage, release, restoreOriginal, rollback, rollback, rowSetPopulated, setKeyColumns, setMetaData, setOriginalRow, setPageSize, setShowDeleted, setSyncProvider, setTableName, size, toCollection, toCollection, toCollection, undoDelete, undoInsert, undoUpdate在接口 javax.sql.rowset.Joinable 中声明的方法
getMatchColumnIndexes, getMatchColumnNames, setMatchColumn, setMatchColumn, setMatchColumn, setMatchColumn, unsetMatchColumn, unsetMatchColumn, unsetMatchColumn, unsetMatchColumn在接口 java.sql.ResultSet 中声明的方法
absolute, afterLast, beforeFirst, cancelRowUpdates, clearWarnings, close, deleteRow, findColumn, first, getArray, getArray, getAsciiStream, getAsciiStream, getBigDecimal, getBigDecimal, getBigDecimal, getBigDecimal, getBinaryStream, getBinaryStream, getBlob, getBlob, getBoolean, getBoolean, getByte, getByte, getBytes, getBytes, getCharacterStream, getCharacterStream, getClob, getClob, getConcurrency, getCursorName, getDate, getDate, getDate, getDate, getDouble, getDouble, getFetchDirection, getFetchSize, getFloat, getFloat, getHoldability, getInt, getInt, getLong, getLong, getMetaData, getNCharacterStream, getNCharacterStream, getNClob, getNClob, getNString, getNString, getObject, getObject, getObject, getObject, getObject, getObject, getRef, getRef, getRow, getRowId, getRowId, getShort, getShort, getSQLXML, getSQLXML, getStatement, getString, getString, getTime, getTime, getTime, getTime, getTimestamp, getTimestamp, getTimestamp, getTimestamp, getType, getUnicodeStream, getUnicodeStream, getURL, getURL, getWarnings, insertRow, isAfterLast, isBeforeFirst, isClosed, isFirst, isLast, last, moveToCurrentRow, moveToInsertRow, next, previous, refreshRow, relative, rowDeleted, rowInserted, rowUpdated, setFetchDirection, setFetchSize, updateArray, updateArray, updateAsciiStream, updateAsciiStream, updateAsciiStream, updateAsciiStream, updateAsciiStream, updateAsciiStream, updateBigDecimal, updateBigDecimal, updateBinaryStream, updateBinaryStream, updateBinaryStream, updateBinaryStream, updateBinaryStream, updateBinaryStream, updateBlob, updateBlob, updateBlob, updateBlob, updateBlob, updateBlob, updateBoolean, updateBoolean, updateByte, updateByte, updateBytes, updateBytes, updateCharacterStream, updateCharacterStream, updateCharacterStream, updateCharacterStream, updateCharacterStream, updateCharacterStream, updateClob, updateClob, updateClob, updateClob, updateClob, updateClob, updateDate, updateDate, updateDouble, updateDouble, updateFloat, updateFloat, updateInt, updateInt, updateLong, updateLong, updateNCharacterStream, updateNCharacterStream, updateNCharacterStream, updateNCharacterStream, updateNClob, updateNClob, updateNClob, updateNClob, updateNClob, updateNClob, updateNString, updateNString, updateNull, updateNull, updateObject, updateObject, updateObject, updateObject, updateObject, updateObject, updateObject, updateObject, updateRef, updateRef, updateRow, updateRowId, updateRowId, updateShort, updateShort, updateSQLXML, updateSQLXML, updateString, updateString, updateTime, updateTime, updateTimestamp, updateTimestamp, wasNull在接口 javax.sql.RowSet 中声明的方法
addRowSetListener, clearParameters, execute, getCommand, getDataSourceName, getEscapeProcessing, getMaxFieldSize, getMaxRows, getPassword, getQueryTimeout, getTransactionIsolation, getTypeMap, getUrl, getUsername, isReadOnly, removeRowSetListener, setArray, setAsciiStream, setAsciiStream, setAsciiStream, setAsciiStream, setBigDecimal, setBigDecimal, setBinaryStream, setBinaryStream, setBinaryStream, setBinaryStream, setBlob, setBlob, setBlob, setBlob, setBlob, setBlob, setBoolean, setBoolean, setByte, setByte, setBytes, setBytes, setCharacterStream, setCharacterStream, setCharacterStream, setCharacterStream, setClob, setClob, setClob, setClob, setClob, setClob, setCommand, setConcurrency, setDataSourceName, setDate, setDate, setDate, setDate, setDouble, setDouble, setEscapeProcessing, setFloat, setFloat, setInt, setInt, setLong, setLong, setMaxFieldSize, setMaxRows, setNCharacterStream, setNCharacterStream, setNCharacterStream, setNCharacterStream, setNClob, setNClob, setNClob, setNClob, setNClob, setNClob, setNString, setNString, setNull, setNull, setNull, setNull, setObject, setObject, setObject, setObject, setObject, setObject, setPassword, setQueryTimeout, setReadOnly, setRef, setRowId, setRowId, setShort, setShort, setSQLXML, setSQLXML, setString, setString, setTime, setTime, setTime, setTime, setTimestamp, setTimestamp, setTimestamp, setTimestamp, setTransactionIsolation, setType, setTypeMap, setUrl, setURL, setUsername在接口 java.sql.Wrapper 中声明的方法
isWrapperFor, unwrap
-
字段详细信息
-
CROSS_JOIN
static final int CROSS_JOINANSI 风格的JOIN提供两个表的叉积- 参见:
-
INNER_JOIN
static final int INNER_JOINANSI 样式JOIN提供两个表之间的内部连接。连接的任一表中的任何不匹配的行都应该被丢弃。- 参见:
-
LEFT_OUTER_JOIN
static final int LEFT_OUTER_JOIN一个 ANSI 风格的JOIN提供两个表之间的左外连接。在 SQL 中,这描述了应从 JOIN 语句左侧返回所有记录的位置。- 参见:
-
RIGHT_OUTER_JOIN
static final int RIGHT_OUTER_JOINANSI 风格的JOIN提供两个表之间的右外连接。在 SQL 中,这被描述为 JOIN 语句右侧的表中的所有记录,即使左侧的表没有匹配的记录。- 参见:
-
FULL_JOIN
static final int FULL_JOIN提供完整 JOIN 的 ANSI 样式JOIN。指定返回任一表中的所有行,而不管另一个表中的匹配记录。- 参见:
-
-
方法详情
-
addRowSet
将给定的RowSet对象添加到此JoinRowSet对象。如果RowSet对象是第一个添加到此JoinRowSet对象的对象,则它构成要建立的JOIN关系的基础。仅当给定的
RowSet对象已经具有使用Joinable方法setMatchColumn设置的匹配列时,才应使用此方法。注意:
Joinable对象是任何已实现Joinable接口的RowSet对象。- 参数:
rowset- 要添加到此JoinRowSet对象的RowSet对象;它必须实现Joinable接口并设置匹配列- 抛出:
SQLException- 如果 (1) 一个空行集被添加到这个JoinRowSet对象,(2) 没有设置匹配列行集, 或 (3)行集违反活动JOIN- 参见:
-
addRowSet
将给定的RowSet对象添加到此JoinRowSet对象并将指定列设置为RowSet对象的匹配列。如果RowSet对象是第一个添加到此JoinRowSet对象的对象,则它构成要建立的JOIN关系的基础。这个方法应该在什么时候使用RowSet还没有设置匹配列。
- 参数:
rowset- 要添加到此JoinRowSet对象的RowSet对象;它可以实现Joinable接口columnIdx- 一个int标识要成为匹配列的列- 抛出:
SQLException- 如果 (1)行集是空行集或 (2)行集违反活动JOIN- 参见:
-
addRowSet
添加行集到这个JoinRowSet对象并将指定的列设置为匹配列。如果行集是第一个添加到这个JoinRowSet对象的,它构成了要建立的JOIN关系的基础。当给定的
RowSet对象还没有匹配列时,应使用此方法。- 参数:
rowset- 要添加到此JoinRowSet对象的RowSet对象;它可以实现Joinable接口columnName-String对象给出要设置为匹配列的列的名称- 抛出:
SQLException- 如果 (1)行集是空行集或 (2) 的匹配列行集不满足JOIN的条件
-
addRowSet
将给定RowSet对象数组中包含的一个或多个RowSet对象添加到此JoinRowSet对象,并将每个RowSet对象的匹配列设置为给定列索引数组中的匹配列。中的第一个元素columnIdx被设置为第一个RowSet对象的匹配列行集, 第二个元素columnIdx被设置为第二个元素的匹配列行集, 等等。添加到此
JoinRowSet对象的第一个RowSet对象构成了JOIN关系的基础。当给定的
RowSet对象还没有匹配列时,应使用此方法。- 参数:
rowset- 要添加到JOIN的一个或多个RowSet对象的数组;它可以实现Joinable接口columnIdx- 一个int值数组,指示要设置为RowSet对象的匹配列的列的索引行集- 抛出:
SQLException- 如果 (1) 向此JoinRowSet对象添加一个空行集,(2) 未为RowSet对象设置匹配列行集,或者 (3) 添加的RowSet对象违反了活动的JOIN
-
addRowSet
将给定RowSet对象数组中包含的一个或多个RowSet对象添加到此JoinRowSet对象,并将每个RowSet对象的匹配列设置为给定列名数组中的匹配列。中的第一个元素列名被设置为第一个RowSet对象的匹配列行集, 第二个元素列名被设置为第二个元素的匹配列行集, 等等。添加到此
JoinRowSet对象的第一个RowSet对象构成了JOIN关系的基础。当给定的
RowSet对象还没有匹配列时,应使用此方法。- 参数:
rowset- 要添加到JOIN的一个或多个RowSet对象的数组;它可以实现Joinable接口columnName- 一个String值数组,指示要设置为RowSet对象的匹配列的列的名称行集- 抛出:
SQLException- 如果 (1) 向此JoinRowSet对象添加一个空行集,(2) 未为RowSet对象设置匹配列行集,或者 (3) 添加的RowSet对象违反了活动的JOIN
-
getRowSets
返回一个Collection对象,其中包含已添加到此JoinRowSet对象的RowSet对象。这应该返回JOIN中包含的“n”个 RowSet 并维护在此联合中发生的任何更新。- 返回:
-
一个
Collection对象,由添加到此JoinRowSet对象的RowSet对象组成 - 抛出:
SQLException- 如果发生错误生成要返回的Collection对象
-
getRowSetNames
返回一个String数组,其中包含添加到此JoinRowSet对象的RowSet对象的名称。- 返回:
-
这个
JoinRowSet对象中的RowSet对象的名称的String数组 - 抛出:
SQLException- 如果检索RowSet对象的名称时发生错误- 参见:
-
toCachedRowSet
创建一个包含此JoinRowSet对象中数据的新CachedRowSet对象,可以使用CachedRowSet对象的SyncProvider对象将其保存到数据源。如果对 JoinRowSet 应用了任何更新或修改,则该方法返回的 CachedRowSet 将无法将其更改保存回数据源中的原始行和表。返回的 CachedRowSet 实例不应包含修改数据,并且应清除其原始 SQL 语句的所有属性。应用程序应使用
RowSet.setCommand方法重置 SQL 语句。为了允许将更改持久保存回原始表的数据源,应该在 JoinRowSet 对象实例上使用和调用
acceptChanges方法。实现可以利用其实现中的内部数据和更新跟踪来与 SyncProvider 交互以保留任何更改。- 返回:
- 包含 JoinRowSet 内容的 CachedRowSet
- 抛出:
SQLException- 如果组装 CachedRowSet 对象时发生错误- 参见:
-
supportsCrossJoin
boolean supportsCrossJoin()指示 JoinRowSet 实现是否支持 CROSS_JOIN- 返回:
- 如果支持 CROSS_JOIN,则为真;否则为假
-
supportsInnerJoin
boolean supportsInnerJoin()指示 INNER_JOIN 是否受 JoinRowSet 实现支持- 返回:
- true 是支持 INNER_JOIN;否则为假
-
supportsLeftOuterJoin
boolean supportsLeftOuterJoin()指示 LEFT_OUTER_JOIN 是否受 JoinRowSet 实现支持- 返回:
- 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
允许应用程序调整对包含在 JoinRowSet 对象实例中的表施加的JOIN类型。如果实现不支持给定的JOIN类型,则应抛出 SQLException。- 参数:
joinType- SQLJOIN的标准 JoinRowSet.XXX 静态字段定义,用于动态重新配置 JoinRowSet 实例。- 抛出:
SQLException- 如果设置了不受支持的JOIN类型- 参见:
-
getWhereClause
返回在 JoinRowSet 对象中使用的 WHERE 子句的类似 SQL 的描述。实现可以通过提供JOIN的 SQL 字符串描述来描述 SQLJOIN的 WHERE 子句,或者提供文本描述来帮助使用JoinRowSet的应用程序- 返回:
- whereClause JoinRowSet 实例中使用的逻辑 WHERE 子句的文本或 SQL 描述
- 抛出:
SQLException- 如果在生成 WHERE 子句的表示时发生错误。
-
getJoinType
返回一个int描述管理此 JoinRowSet 实例的集合 SQLJOIN类型。返回的类型将是标准 JoinRowSet 类型之一:CROSS_JOIN、INNER_JOIN、LEFT_OUTER_JOIN、RIGHT_OUTER_JOIN或FULL_JOIN。- 返回:
-
joinType SQL
JOIN的标准 JoinRowSet 静态字段定义之一。JoinRowSet.INNER_JOIN作为默认值返回JOIN类型是未明确设置的类型。 - 抛出:
SQLException- 如果在确定 JoinRowSet 实例支持的 SQLJOIN类型时发生错误。- 参见:
-