- 所有超接口:
-
AutoCloseable
,CachedRowSet
,Joinable
,ResultSet
,RowSet
,WebRowSet
,Wrapper
JoinRowSet
接口提供了一种机制,将来自不同RowSet
对象的相关数据合并到一个JoinRowSet
对象中,该对象表示一个SQL JOIN
。换句话说,JoinRowSet
对象充当了来自形成SQL JOIN
关系的RowSet
对象的数据的容器。
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
关系。
要建立的JOIN
类型是通过使用方法setJoinType
设置JoinRowSet
常量之一来确定的。可以设置以下SQL JOIN
类型:
CROSS_JOIN
FULL_JOIN
INNER_JOIN
- 如果未设置任何JOIN
类型,则默认为内部连接LEFT_OUTER_JOIN
RIGHT_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。
在以下代码片段中,表EMPLOYEES
的匹配列设置为第一列(EMP_ID
),然后添加到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是基于它们的EMP_ID
列的两个RowSet
对象的内部连接。应用程序现在可以浏览组合数据,就好像浏览单个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现在包含来自所有三个表的值。在four01k中的每一行中,EMP_ID
列的值与jrs中的EMP_ID
列的值匹配的数据都已添加到jrs中。
4.0 JoinRowSet
方法
JoinRowSet
接口提供了几种方法,用于添加RowSet
对象和获取有关JoinRowSet
对象的信息。
- 添加一个或多个
RowSet
对象的方法
这些方法允许应用程序一次添加一个RowSet
对象,或一次添加多个RowSet
对象。在任何情况下,这些方法都可以为每个被添加的RowSet
对象指定匹配列。 - 获取信息的方法
一个方法检索JoinRowSet
对象中的RowSet
对象,另一个方法检索RowSet
名称。第三个方法检索用于在幕后形成JOIN
的SQLWHERE
子句,或者检索WHERE
子句的文本描述。 - 与
JOIN
类型相关的方法
一个方法设置JOIN
类型,五个方法查找JoinRowSet
对象是否支持给定类型。 - 创建
JoinRowSet
对象的单独副本的方法
此方法创建一个可以持久化到数据源的副本。
- 自从:
- 1.5
-
Field Summary
Modifier and TypeFieldDescriptionstatic final int
一个提供两个表的交叉乘积的ANSI风格JOIN
static final int
一个提供完整JOIN的ANSI风格JOIN
static final int
一个提供两个表之间内部连接的ANSI风格JOIN
static final int
一个提供两个表之间左外连接的ANSI风格JOIN
static final int
一个提供两个表之间右外连接的ANSI风格JOIN
Fields declared in interface javax.sql.rowset.CachedRowSet
COMMIT_ON_ACCEPT_CHANGES
Fields declared in interface 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
Fields declared in interface javax.sql.rowset.WebRowSet
PUBLIC_XML_SCHEMA, SCHEMA_SYSTEM_ID
-
Method Summary
Modifier and TypeMethodDescriptionvoid
将包含在给定RowSet
对象数组中的一个或多个RowSet
对象添加到此JoinRowSet
对象,并为给定的列索引数组中的每个RowSet
对象设置匹配列。void
将包含在给定RowSet
对象数组中的一个或多个RowSet
对象添加到此JoinRowSet
对象,并为给定的列名数组中的每个RowSet
对象设置匹配列。void
将给定的RowSet
对象添加到此JoinRowSet
对象。void
将给定的RowSet
对象添加到此JoinRowSet
对象,并将指定的列设置为RowSet
对象的匹配列。void
将rowset添加到此JoinRowSet
对象,并将指定的列设置为匹配列。int
返回描述管理此JoinRowSet实例的SQL JOIN类型的int
。String[]
返回一个包含已添加到此JoinRowSet
对象的RowSet
对象名称的String
数组。Collection
<?> 返回包含已添加到此JoinRowSet
对象的RowSet
对象的Collection
对象。返回JoinRowSet对象中正在使用的WHERE子句的类似SQL描述。void
setJoinType
(int joinType) 允许应用程序调整JoinRowSet对象实例中包含的表上强加的JOIN类型。boolean
指示JoinRowSet实现是否支持CROSS_JOIN。boolean
指示JoinRowSet实现是否支持FULL_JOIN。boolean
指示JoinRowSet实现是否支持INNER_JOIN。boolean
指示JoinRowSet实现是否支持LEFT_OUTER_JOIN。boolean
指示JoinRowSet实现是否支持RIGHT_OUTER_JOIN。创建一个包含此JoinRowSet
对象中数据的新CachedRowSet
对象,可以使用CachedRowSet
对象的SyncProvider
对象将其保存到数据源。Methods declared in interface 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
Methods declared in interface javax.sql.rowset.Joinable
getMatchColumnIndexes, getMatchColumnNames, setMatchColumn, setMatchColumn, setMatchColumn, setMatchColumn, unsetMatchColumn, unsetMatchColumn, unsetMatchColumn, unsetMatchColumn
Methods declared in interface 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
Methods declared in interface 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
Methods declared in interface javax.sql.rowset.WebRowSet
readXml, readXml, writeXml, writeXml, writeXml, writeXml
Methods declared in interface java.sql.Wrapper
isWrapperFor, unwrap
-
Field Details
-
CROSS_JOIN
static final int CROSS_JOIN提供两个表的交叉乘积的ANSI风格JOIN。- 参见:
-
INNER_JOIN
static final int INNER_JOIN提供两个表之间内部连接的ANSI风格JOIN。连接中任一表中未匹配的行应被丢弃。- 参见:
-
LEFT_OUTER_JOIN
static final int LEFT_OUTER_JOIN提供两个表之间左外连接的ANSI风格JOIN。在SQL中,这是指应从JOIN语句的左侧返回所有记录。- 参见:
-
RIGHT_OUTER_JOIN
static final int RIGHT_OUTER_JOIN提供两个表之间右外连接的ANSI风格JOIN。在SQL中,这是指即使左侧表没有匹配记录,也应从JOIN语句的右侧表返回所有记录。- 参见:
-
FULL_JOIN
static final int FULL_JOIN提供全连接的ANSI风格JOIN。指定应返回来自任一表的所有行,而不考虑另一表上的匹配记录。- 参见:
-
-
Method Details
-
addRowSet
将给定的RowSet
对象添加到此JoinRowSet
对象。如果RowSet
对象是添加到此JoinRowSet
对象的第一个对象,则它将成为要建立的JOIN关系的基础。仅当给定的
RowSet
对象已经使用Joinable
方法setMatchColumn
设置了匹配列时,应使用此方法。注意:任何实现了
Joinable
接口的RowSet
对象都是Joinable
对象。- 参数:
-
rowset
- 要添加到此JoinRowSet
对象的RowSet
对象;它必须实现Joinable
接口并设置匹配列 - 抛出:
-
SQLException
- 如果:(1) 向此JoinRowSet
对象添加了空行集,(2) 未为rowset设置匹配列,或(3) rowset违反了活动的JOIN
- 参见:
-
addRowSet
将给定的RowSet
对象添加到此JoinRowSet
对象,并为RowSet
对象设置指定的列作为匹配列。如果RowSet
对象是添加到此JoinRowSet
对象的第一个对象,则它将成为要建立的JOIN关系的基础。当RowSet尚未设置匹配列时,应使用此方法。
- 参数:
-
rowset
- 要添加到此JoinRowSet
对象的RowSet
对象;它可能实现Joinable
接口 -
columnIdx
- 标识要成为匹配列的列的int
- 抛出:
-
SQLException
- 如果:(1) rowset是空行集或(2) rowset违反了活动的JOIN
- 参见:
-
addRowSet
将rowset添加到此JoinRowSet
对象,并将指定的列设置为匹配列。如果rowset是添加到此JoinRowSet
对象的第一个对象,则它将成为要建立的JOIN关系的基础。当给定的
RowSet
对象尚未设置匹配列时,应使用此方法。- 参数:
-
rowset
- 要添加到此JoinRowSet
对象的RowSet
对象;它可能实现Joinable
接口 -
columnName
- 给出要设置为匹配列的列的String
对象的名称 - 抛出:
-
SQLException
- 如果:(1) rowset是空行集或(2) rowset的匹配列不满足JOIN
的条件
-
addRowSet
将包含在给定的RowSet
对象数组中的一个或多个RowSet
对象添加到此JoinRowSet
对象,并为每个RowSet
对象设置匹配列为给定的列索引数组中的匹配列。在columnIdx中的第一个元素设置为rowset中的第一个RowSet
对象的匹配列,columnIdx的第二个元素设置为rowset中的第二个元素的匹配列,依此类推。添加到此
JoinRowSet
对象的第一个RowSet
对象将成为JOIN关系的基础。当给定的
RowSet
对象尚未设置匹配列时,应使用此方法。- 参数:
-
rowset
- 一个或多个要添加到JOIN
的RowSet
对象数组;它可能实现Joinable
接口 -
columnIdx
- 一个int
值数组,指示要为rowset中的RowSet
对象设置为匹配列的索引 - 抛出:
-
SQLException
- 如果:(1) 向此JoinRowSet
对象添加了空行集,(2) 未为rowset中的RowSet
对象设置匹配列,或(3) 正在添加的RowSet
对象违反了活动的JOIN
-
addRowSet
将包含在给定的RowSet
对象数组中的一个或多个RowSet
对象添加到此JoinRowSet
对象,并为每个RowSet
对象设置匹配列为给定的列名称数组中的匹配列。在columnName中的第一个元素设置为rowset中的第一个RowSet
对象的匹配列,columnName的第二个元素设置为rowset中的第二个元素的匹配列,依此类推。添加到此
JoinRowSet
对象的第一个RowSet
对象将成为JOIN关系的基础。当给定的
RowSet
对象尚未设置匹配列时,应使用此方法。- 参数:
-
rowset
- 一个或多个要添加到JOIN
的RowSet
对象数组;它可能实现Joinable
接口 -
columnName
- 一个String
值数组,指示要为rowset中的RowSet
对象设置为匹配列的名称 - 抛出:
-
SQLException
- 如果:(1) 向此JoinRowSet
对象添加了空行集,(2) 未为rowset中的RowSet
对象设置匹配列,或(3) 正在添加的RowSet
对象违反了活动的JOIN
-
getRowSets
返回一个包含已添加到此JoinRowSet
对象的RowSet
对象的Collection
对象。这应返回包含在JOIN
中的'n'个RowSet并保留在此联合中发生的任何更新。- 返回:
-
由添加到此
JoinRowSet
对象的RowSet
对象组成的Collection
对象 - 抛出:
-
SQLException
- 如果生成要返回的Collection
对象时发生错误
-
getRowSetNames
返回一个包含已添加到此JoinRowSet
对象的RowSet
对象名称的String
数组。- 返回:
-
返回一个
String
数组,包含此JoinRowSet
对象中RowSet
对象的名称 - 抛出:
-
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则返回true;否则返回false
-
supportsInnerJoin
boolean supportsInnerJoin()指示JoinRowSet实现是否支持INNER_JOIN- 返回:
- 如果支持INNER_JOIN则返回true;否则返回false
-
supportsLeftOuterJoin
boolean supportsLeftOuterJoin()指示JoinRowSet实现是否支持LEFT_OUTER_JOIN- 返回:
- 如果支持LEFT_OUTER_JOIN则返回true;否则返回false
-
supportsRightOuterJoin
boolean supportsRightOuterJoin()指示JoinRowSet实现是否支持RIGHT_OUTER_JOIN- 返回:
- 如果支持RIGHT_OUTER_JOIN则返回true;否则返回false
-
supportsFullJoin
boolean supportsFullJoin()指示JoinRowSet实现是否支持FULL_JOIN- 返回:
- 如果支持FULL_JOIN则返回true;否则返回false
-
setJoinType
允许应用程序调整JoinRowSet对象实例中包含的表之间强加的JOIN类型。如果实现不支持给定的JOIN类型,则应抛出SQLException。- 参数:
-
joinType
- SQLJOIN
的标准JoinRowSet.XXX静态字段定义,用于动态重新配置JoinRowSet实例的JOIN类型。 - 抛出:
-
SQLException
- 如果设置了不支持的JOIN
类型 - 参见:
-
getWhereClause
返回一个类似SQL的描述,描述JoinRowSet对象中使用的WHERE子句。实现可以通过提供SQL字符串描述JOIN的WHERE子句,或提供文本描述来帮助使用JoinRowSet
的应用程序。- 返回:
- whereClause描述JoinRowSet实例中使用的逻辑WHERE子句的文本或SQL描述
- 抛出:
-
SQLException
- 如果生成WHERE子句的表示发生错误
-
getJoinType
返回一个描述管理此JoinRowSet实例的SQL JOIN类型的int
。返回的类型将是标准JoinRowSet类型之一:CROSS_JOIN
、INNER_JOIN
、LEFT_OUTER_JOIN
、RIGHT_OUTER_JOIN
或FULL_JOIN
。- 返回:
-
joinType一个SQL
JOIN
的标准JoinRowSet静态字段定义。如果未明确设置类型,则返回JoinRowSet.INNER_JOIN
作为默认JOIN
类型。 - 抛出:
-
SQLException
- 如果确定JoinRowSet实例支持的SQLJOIN
类型时发生错误 - 参见:
-