public interface JoinRowSet extends WebRowSet
JoinRowSet接口提供了将不同RowSet对象的相关数据RowSet到一个JoinRowSet对象中的机制,该对象表示SQL JOIN 。
换句话说, JoinRowSet对象充当来自RowSet对象的RowSet ,形成一个SQL JOIN关系。
Joinable接口提供了设置,检索和取消设置匹配列的方法,建立SQL JOIN关系的基础。 可以通过将匹配列提供给JointRowSet方法addRowSet的适当版本来设置匹配列。
RowSet对象( CachedRowSet对象和扩展的实现CachedRowSet接口)没有标准的方法来建立一个SQL JOIN之间RowSet对象,而不重新连接到数据源的昂贵的操作。
JoinRowSet接口专门用于满足这一需求。
任何RowSet对象都可以添加到JoinRowSet对象中,成为SQL JOIN关系的一部分。
这意味着连接和断开的RowSet对象可以是JOIN一部分。 RowSet在连接环境中(操作对象JdbcRowSet对象)鼓励使用数据库它们已经连接到SQL建立JOIN直接表之间的关系。
但是,如果需要,可以将JdbcRowSet对象添加到JoinRowSet对象。
任何数量的RowSet对象都可以添加到JoinRowSet的实例中,前提是它们可以在SQL JOIN相关。
根据定义,SQL JOIN语句用于根据公共属性组合包含在两个或多个关系数据库表中的数据。
Joinable接口提供了建立公共属性的方法,通过设置匹配列来完成。 匹配列通常与主键一致,但不要求匹配列与主键相同。
通过建立和实施再列匹配,一个JoinRowSet对象建立JOIN之间的关系RowSet没有可用的关系数据库的援助对象。
的类型的JOIN要建立是通过将所确定JoinRowSet使用该方法的常量setJoinType 。
可以设置以下SQL JOIN类型:
CROSS_JOINFULL_JOININNER_JOIN - 如果没有设置JOIN类型的默认值LEFT_OUTER_JOINRIGHT_OUTER_JOINJOIN将自动成为内部连接。
对JoinRowSet界面中的字段的JoinRowSet解释了这些JOIN类型,这是标准的SQL JOIN类型。
JoinRowSet对象创建JOINJoinRowSet对象时,它为空。
要添加的第一个RowSet对象成为JOIN关系的基础。
应用程序必须确定要添加到JoinRowSet对象的每个RowSet对象中的哪个列应该是匹配列。
所有RowSet对象必须包含匹配列,每个匹配列中的值必须是可与其他匹配列中的值进行比较的值。
列不必具有相同的名称,尽管它们经常做到,并且只要可以比较数据类型,它们就不必存储完全相同的数据类型。
匹配列可以通过两种方式设置:
Joinable方法setMatchColumn RowSet对象添加到JoinRowSet对象之前可以设置匹配列的唯一方法。
RowSet对象必须实现Joinable接口才能使用方法setMatchColumn 。
一旦设置了匹配列值,该方法就可以随时重置匹配列。JoinRowSet方法addRowSet一个版本,该方法采用列名或数字(或列名或数字数组)
addRowSet方法中的四个将匹配列作为参数。 这四种方法设置或在时间复位的匹配列RowSet对象被添加到一个JoinRowSet对象。
以下代码段将两个CachedRowSet对象添加到JoinRowSet对象。 请注意,在此示例中,没有设置SQL JOIN类型,因此默认的JOIN类型(即INNER_JOIN )已建立。
在以下代码片段中,将匹配列设置为第一列( EMP_ID )的表EMPLOYEES添加到JoinRowSet对象jrs 。
然后添加表ESSP_BONUS_PLAN ,其匹配列同样为EMP_ID列。 当该第二表被添加到JRS,只有在排ESSP_BONUS_PLAN其EMP_ID值相匹配的EMP_ID在值EMPLOYEES加入表中。
在这种情况下,奖金计划中的每个人都是员工,所以表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对象的内部JOIN。 该应用程序现在可以浏览组合的数据,就像浏览一个单一的RowSet对象一样。
因为jrs本身是一个RowSet对象,应用程序可以使用RowSet方法导航或修改它。
jrs.first();
int employeeID = jrs.getInt(1);
String employeeName = jrs.getString(2);
请注意,由于SQL JOIN当应用程序增加了第二个或后续必须执行RowSet对象而,有可能是在性能初始降解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柱为相匹配的值EMP_ID在JRS列已被添加到JRS。
JoinRowSet方法JoinRowSet接口提供了几种添加RowSet对象的方法,并提供有关JoinRowSet对象的信息。
RowSet对象的方法 RowSet对象,或者一次添加多个RowSet对象。
在这两种情况下,方法可以为要添加的每个RowSet对象指定匹配列。RowSet对象中的JoinRowSet对象,另一种方法检索RowSet名称。
第三种方法检索幕后使用的SQL WHERE子句以形成JOIN或WHERE子句的文本描述。
JOIN类型有关 JOIN类型,五种方法查找JoinRowSet对象是否支持给定类型。
JoinRowSet对象的单独副本的方法 | Modifier and Type | Field and Description |
|---|---|
static int |
CROSS_JOIN
ANSI样式
JOIN提供两个表的十字积
|
static int |
FULL_JOIN
一个ANSI风格的
JOIN提供了一个完整的JOIN。
|
static int |
INNER_JOIN
ANSI样式的
JOIN提供两个表之间的内部连接。
|
static int |
LEFT_OUTER_JOIN
ANSI样式
JOIN提供两个表之间的左外连接。
|
static int |
RIGHT_OUTER_JOIN
ANSI样式
JOIN提供两个表之间的右外连接。
|
PUBLIC_XML_SCHEMA,
SCHEMA_SYSTEM_ID
COMMIT_ON_ACCEPT_CHANGES
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
| Modifier and Type | Method and Description |
|---|---|
void |
addRowSet(Joinable rowset)
将给定的
RowSet对象添加到此
JoinRowSet对象。
|
void |
addRowSet(RowSet[] rowset,
int[] columnIdx)
将
RowSet对象的给定数组中
RowSet一个或多个
RowSet对象添加到此
JoinRowSet对象中,并将每个
RowSet对象的匹配列设置为给定列索引数组中的匹配列。
|
void |
addRowSet(RowSet[] rowset,
String[] columnName)
将
RowSet对象的给定数组中
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 int。
|
String[] |
getRowSetNames()
返回一个
String数组,其中
RowSet添加到此
JoinRowSet对象的
RowSet对象的名称。
|
Collection<?>
|
getRowSets()
返回一个
Collection包含对象
RowSet已经添加到该物体
JoinRowSet对象。
|
String |
getWhereClause()
返回在JoinRowSet对象中使用的WHERE子句的类似SQL的描述。
|
void |
setJoinType(int joinType)
允许应用程序调整对JoinRowSet对象实例中包含的表所强制的类型
JOIN 。
|
boolean |
supportsCrossJoin()
指示CROSS_JOIN是否由JoinRowSet实现支持
|
boolean |
supportsFullJoin()
指示JoinRowSet实现是否支持FULL_JOIN
|
boolean |
supportsInnerJoin()
指示JoinRowSet实现是否支持INNER_JOIN
|
boolean |
supportsLeftOuterJoin()
指示JoinRowSet实现是否支持LEFT_OUTER_JOIN
|
boolean |
supportsRightOuterJoin()
指示JoinRowSet实现是否支持RIGHT_OUTER_JOIN
|
CachedRowSet
|
toCachedRowSet()
创建一个新的
CachedRowSet对象,其中包含该
JoinRowSet对象中的数据,可以使用
SyncProvider对象的
CachedRowSet对象将其保存到数据源。
|
readXml,
readXml,
writeXml,
writeXml,
writeXml,
writeXml
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
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
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,
wasNullisWrapperFor,
unwrap
getMatchColumnIndexes,
getMatchColumnNames,
setMatchColumn,
setMatchColumn,
setMatchColumn,
setMatchColumn,
unsetMatchColumn,
unsetMatchColumn,
unsetMatchColumn,
unsetMatchColumn
static final int CROSS_JOIN
JOIN提供两个表的交叉产品
static final int INNER_JOIN
JOIN提供两个表之间的内部连接。
连接任一表中的任何不匹配的行都应该被丢弃。
static final int LEFT_OUTER_JOIN
JOIN提供了两个表之间的左外连接。
在SQL中,描述了所有记录应从JOIN语句的左侧返回。
static final int RIGHT_OUTER_JOIN
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对象是任何RowSet已经实现对象Joinable接口。
rowset -所述RowSet对象,它是要被添加到该JoinRowSet对象;
它必须实现Joinable接口并具有匹配列集
SQLException
- 如果(1)将一个空行集添加到此
JoinRowSet对象中,(2)尚未为
行集设置匹配列,或(3)
行集违反了活动状态
JOIN
Joinable.setMatchColumn(int)
void addRowSet(RowSet rowset, int columnIdx) throws SQLException
RowSet对象添加到此JoinRowSet对象中,并将指定的列设置为RowSet对象的匹配列。
如果RowSet对象是第一个被添加到这个JoinRowSet对象,它构成了要建立的JOIN关系的基础。
当RowSet尚未设置匹配列时,应使用此方法。
rowset -所述RowSet对象,它是要被添加到该JoinRowSet对象;
它可以实现Joinable接口
columnIdx -
int列以成为匹配列的int
SQLException
- if(1)
行集是空的行集,或者(2)
行集违反了活动的方式
JOIN
Joinable.unsetMatchColumn(int)
void addRowSet(RowSet rowset, String columnName) throws SQLException
JoinRowSet对象,并将指定的列设置为匹配列。
如果行集是第一个要添加到此JoinRowSet对象中的,则它将构成JOIN关系的基础。
当给定的RowSet对象尚不具有匹配列时,应使用此方法。
rowset -所述RowSet对象,它是要被添加到该JoinRowSet对象;
它可以实现Joinable接口
columnName - 提供要设置为匹配列的列的名称的
String对象
SQLException
- 如果(1)
行集是空行集,或者(2)
行集合的匹配列不满足条件
JOIN
void addRowSet(RowSet[] rowset, int[] columnIdx) throws SQLException
RowSet对象的给定数组中RowSet一个或多个RowSet对象添加到此JoinRowSet对象中,并将每个RowSet对象的匹配列设置为给定的列索引数组中的匹配列。
在columnIdx第一元件被设置为匹配列第一RowSet在行集对象,columnIdx的第二元件被设置为匹配列在行集的第二个元素,依此类推。
第一个RowSet对象添加到这个JoinRowSet对象中形成了JOIN关系的基础。
当给定的RowSet对象尚未具有匹配列时,应使用此方法。
rowset - 要添加到JOIN的一个或多个RowSet对象的JOIN ;
它可以实现Joinable接口
columnIdx - 一个
int值的数组,
int要设置为
行集中
RowSet对象的匹配列的索引的索引
SQLException
- 如果(1)一个空的行集被添加到这个
JoinRowSet对象,(2)没有为
行集中的
RowSet对象设置匹配列,或者(3)被添加的
RowSet对象违反了活动
JOIN
void addRowSet(RowSet[] rowset, String[] columnName) throws SQLException
RowSet对象的给定数组中RowSet一个或多个RowSet对象添加到此JoinRowSet对象中,并将每个RowSet对象的匹配列设置为给定列名称数组中的匹配列。
在COLUMNNAME第一元件被设置为匹配列第一RowSet在行集对象,COLUMNNAME的第二元件被设置为匹配列在行集的第二个元素,依此类推。
第一个RowSet对象添加到这个JoinRowSet对象中形成了JOIN关系的基础。
当给定的RowSet对象尚未具有匹配列时,应使用此方法。
rowset - 要添加到JOIN的一个或多个RowSet对象的JOIN ;
它可以实现Joinable接口
columnName - 一个
String值的数组,
String要设置为
行集中的
RowSet对象的匹配列的
RowSet
SQLException
- 如果(1)一个空的行集被添加到这个
JoinRowSet对象,(2)没有为
行集中的
RowSet对象设置匹配列,或者(3)被添加的
RowSet对象违反了活动
JOIN
Collection<?> getRowSets() throws SQLException
Collection包含对象RowSet已经添加到该物体JoinRowSet对象。
这应返回包含在范围内的RowSet的“N”数字JOIN和维护,而在这个联盟已经发生的任何更新。
Collection对象组成的
RowSet对象添加到此
JoinRowSet对象
SQLException
- 如果发生错误,生成要返回的
Collection对象
String[] getRowSetNames() throws SQLException
String数组,其中
RowSet添加到此
JoinRowSet对象的
RowSet对象的名称。
String数组的
RowSet对象在这个
JoinRowSet对象中的名称
SQLException
- 如果
RowSet对象的名称发生错误
CachedRowSet.setTableName(java.lang.String)
CachedRowSet toCachedRowSet() throws SQLException
CachedRowSet包含此数据对象JoinRowSet对象,它可以保存到使用数据源SyncProvider对象为CachedRowSet对象。
如果任何更新或修改已应用于JoinRowSet,则该方法返回的CachedRowSet将无法将其更改回数据源中的原始行和表。
返回的CachedRowSet实例不应包含修改数据,它应该清除其原始SQL语句的所有属性。 应用程序应使用RowSet.setCommand方法重置SQL语句。
为了允许将更改持久化回原始表的数据源,应该在JoinRowSet对象实例上使用并调用acceptChanges方法。
实现可以利用其实现中的内部数据和更新跟踪与SyncProvider进行交互,以保持任何更改。
SQLException
- 如果组装CachedRowSet对象时发生错误
RowSet , CachedRowSet , SyncProvider
boolean supportsCrossJoin()
boolean supportsInnerJoin()
boolean supportsLeftOuterJoin()
boolean supportsRightOuterJoin()
boolean supportsFullJoin()
void setJoinType(int joinType)
throws SQLException
JOIN施加在包含在JoinRowSet对象实例中的表。
如果不支持给定的JOIN类型,那么实现应该抛出一个SQLException。
joinType - 标准的JoinRowSet.XXX静态字段定义的SQL
JOIN即可重新配置JoinRowSet实例。
SQLException
- 如果不支持
JOIN类型设置
getJoinType()
String getWhereClause() throws SQLException
JOIN通过提供的SQL字符串描述JOIN或提供的文字说明,以帮助使用应用程序JoinRowSet
SQLException
- 如果在生成WHERE子句的表示中发生错误。
int getJoinType()
throws SQLException
int管理此JoinRowSet实例的集合SQL JOIN int。
返回的类型将是标准JoinRowSet中类型之一: CROSS_JOIN , INNER_JOIN , LEFT_OUTER_JOIN , RIGHT_OUTER_JOIN或FULL_JOIN 。
JOIN的标准JoinRowSet静态字段定义之一。
JoinRowSet.INNER_JOIN作为默认值返回JOIN类型是没有类型已被明确设置。
SQLException
- 如果发生错误,确定由JoinRowSet实例支持的SQL
JOIN类型。
setJoinType(int)