JoinRowSet interface provides a mechanism for combining related
data from different RowSet objects into one JoinRowSet
object, which represents an SQL JOIN.
In other words, a JoinRowSet object acts as a
container for the data from RowSet objects that form an SQL
JOIN relationship.
The Joinable interface provides the methods for setting,
retrieving, and unsetting a match column, the basis for
establishing an SQL JOIN relationship. The match column may
alternatively be set by supplying it to the appropriate version of the
JointRowSet method addRowSet.
RowSet objects (CachedRowSet objects
and implementations extending the CachedRowSet interface)
do not have a standard way to establish an SQL JOIN between
RowSet objects without the expensive operation of
reconnecting to the data source. The JoinRowSet
interface is specifically designed to address this need.
Any RowSet object
can be added to a JoinRowSet object to become
part of an SQL JOIN relationship. This means that both connected
and disconnected RowSet objects can be part of a JOIN.
RowSet objects operating in a connected environment
(JdbcRowSet objects) are
encouraged to use the database to which they are already
connected to establish SQL JOIN relationships between
tables directly. However, it is possible for a
JdbcRowSet object to be added to a JoinRowSet object
if necessary.
Any number of RowSet objects can be added to an
instance of JoinRowSet provided that they
can be related in an SQL JOIN.
By definition, the SQL JOIN statement is used to
combine the data contained in two or more relational database tables based
upon a common attribute. The Joinable interface provides the methods
for establishing a common attribute, which is done by setting a
match column. The match column commonly coincides with
the primary key, but there is
no requirement that the match column be the same as the primary key.
By establishing and then enforcing column matches,
a JoinRowSet object establishes JOIN relationships
between RowSet objects without the assistance of an available
relational database.
The type of JOIN to be established is determined by setting
one of the JoinRowSet constants using the method
setJoinType. The following SQL JOIN types can be set:
CROSS_JOIN
FULL_JOIN
INNER_JOIN - the default if no JOIN type has been set
LEFT_OUTER_JOIN
RIGHT_OUTER_JOIN
JOIN will automatically be an
inner join. The comments for the fields in the
JoinRowSet interface explain these JOIN types, which are
standard SQL JOIN types.
JoinRowSet Object for Creating a JOINJoinRowSet object is created, it is empty.
The first RowSet object to be added becomes the basis for the
JOIN relationship.
Applications must determine which column in each of the
RowSet objects to be added to the JoinRowSet object
should be the match column. All of the
RowSet objects must contain a match column, and the values in
each match column must be ones that can be compared to values in the other match
columns. The columns do not have to have the same name, though they often do,
and they do not have to store the exact same data type as long as the data types
can be compared.
A match column can be set in two ways:
Joinable method setMatchColumnRowSet
object is added to a JoinRowSet object. The RowSet object
must have implemented the Joinable interface in order to use the method
setMatchColumn. Once the match column value
has been set, this method can be used to reset the match column at any time.
JoinRowSet method
addRowSet that takes a column name or number (or an array of
column names or numbers)addRowSet methods take a match column as a parameter.
These four methods set or reset the match column at the time a RowSet
object is being added to a JoinRowSet object.
The following code fragment adds two CachedRowSet
objects to a JoinRowSet object. Note that in this example,
no SQL JOIN type is set, so the default JOIN type,
which is INNER_JOIN, is established.
In the following code fragment, the table EMPLOYEES, whose match
column is set to the first column (EMP_ID), is added to the
JoinRowSet object jrs. Then
the table ESSP_BONUS_PLAN, whose match column is likewise
the EMP_ID column, is added. When this second
table is added to jrs, only the rows in
ESSP_BONUS_PLAN whose EMP_ID value matches an
EMP_ID value in the EMPLOYEES table are added.
In this case, everyone in the bonus plan is an employee, so all of the rows
in the table ESSP_BONUS_PLAN are added to the JoinRowSet
object. In this example, both CachedRowSet objects being added
have implemented the Joinable interface and can therefore call
the Joinable method 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);
At this point, jrs is an inside JOIN of the two RowSet objects
based on their EMP_ID columns. The application can now browse the
combined data as if it were browsing one single RowSet object.
Because jrs is itself a RowSet object, an application can
navigate or modify it using RowSet methods.
jrs.first();
int employeeID = jrs.getInt(1);
String employeeName = jrs.getString(2);
Note that because the SQL JOIN must be enforced when an application
adds a second or subsequent RowSet object, there
may be an initial degradation in performance while the JOIN is
being performed.
The following code fragment adds an additional CachedRowSet object.
In this case, the match column (EMP_ID) is set when the
CachedRowSet object is added to the JoinRowSet object.
ResultSet rs3 = stmt.executeQuery("SELECT * FROM 401K_CONTRIB");
CachedRowSet fourO1k = new CachedRowSetImpl();
four01k.populate(rs3);
jrs.addRowSet(four01k, 1);
The JoinRowSet object jrs now contains values from all three
tables. The data in each row in four01k in which the value for the
EMP_ID column matches a value for the EMP_ID column
in jrs has been added to jrs.
JoinRowSet MethodsJoinRowSet interface supplies several methods for adding
RowSet objects and for getting information about the
JoinRowSet object.
RowSet objectsRowSet object
at a time or to add multiple RowSet objects at one time. In
either case, the methods may specify the match column for each
RowSet object being added.
RowSet objects in the
JoinRowSet object, and another method retrieves the
RowSet names. A third method retrieves either the SQL
WHERE clause used behind the scenes to form the
JOIN or a text description of what the WHERE
clause does.
JOINJOIN type, and five methods find out whether
the JoinRowSet object supports a given type.
JoinRowSet object| Modifier and Type | Field and Description |
|---|---|
| public static final int | CROSS_JOIN
An ANSI-style |
| public static final int | FULL_JOIN
An ANSI-style |
| public static final int | INNER_JOIN
An ANSI-style |
| public static final int | LEFT_OUTER_JOIN
An ANSI-style |
| public static final int | RIGHT_OUTER_JOIN
An ANSI-style |
| Modifier and Type | Method and Description |
|---|---|
| public void | |
| public void | addRowSet(RowSet
the rowset, int RowSet object that is to be added to this
JoinRowSet object; it may implement the
Joinable interfacean columnIdx)int that identifies the column to become the
match columnAdds the given |
| public void | addRowSet(RowSet
the rowset, String RowSet object that is to be added to this
JoinRowSet object; it may implement the
Joinable interfacethe columnName)String object giving the name of the
column to be set as the match columnAdds rowset to this |
| public void | addRowSet(RowSet[]
an array of one or more rowset, int[] RowSet objects
to be added to the JOIN; it may implement the
Joinable interfacean array of columnIdx)int values indicating the index(es)
of the columns to be set as the match columns for the RowSet
objects in rowsetAdds one or more |
| public void | addRowSet(RowSet[]
an array of one or more rowset, String[] RowSet objects
to be added to the JOIN; it may implement the
Joinable interfacean array of columnName)String values indicating the
names of the columns to be set as the match columns for the
RowSet objects in rowsetAdds one or more |
| public int | Returns: joinType one of the standard JoinRowSet static field definitions of a SQLJOIN. JoinRowSet.INNER_JOIN
is returned as the default JOIN type is no type has been
explicitly set.Returns a |
| public String[] | Returns: aString array of the names of the
RowSet objects in this JoinRowSet
objectReturns a |
| public Collection | Returns: aCollection object consisting of the
RowSet objects added to this JoinRowSet
objectReturns a |
| public String | Returns: whereClause a textual or SQL description of the logical WHERE clause used in the JoinRowSet instanceReturn a SQL-like description of the WHERE clause being used in a JoinRowSet object. |
| public void | setJoinType(int
the standard JoinRowSet.XXX static field definition
of a SQL joinType)JOIN to re-configure a JoinRowSet instance on
the fly.Allow the application to adjust the type of |
| public boolean | Returns: true if the CROSS_JOIN is supported; false otherwiseIndicates if CROSS_JOIN is supported by a JoinRowSet implementation |
| public boolean | Returns: true is the FULL_JOIN is supported; false otherwiseIndicates if FULL_JOIN is supported by a JoinRowSet implementation |
| public boolean | Returns: true is the INNER_JOIN is supported; false otherwiseIndicates if INNER_JOIN is supported by a JoinRowSet implementation |
| public boolean | Returns: true is the LEFT_OUTER_JOIN is supported; false otherwiseIndicates if LEFT_OUTER_JOIN is supported by a JoinRowSet implementation |
| public boolean | Returns: true is the RIGHT_OUTER_JOIN is supported; false otherwiseIndicates if RIGHT_OUTER_JOIN is supported by a JoinRowSet implementation |
| public CachedRowSet | Returns: a CachedRowSet containing the contents of the JoinRowSetCreates a new |
| CROSS_JOIN | back to summary |
|---|---|
| public static final int CROSS_JOIN An ANSI-style | |
| FULL_JOIN | back to summary |
|---|---|
| public static final int FULL_JOIN An ANSI-style | |
| INNER_JOIN | back to summary |
|---|---|
| public static final int INNER_JOIN An ANSI-style | |
| LEFT_OUTER_JOIN | back to summary |
|---|---|
| public static final int LEFT_OUTER_JOIN An ANSI-style | |
| RIGHT_OUTER_JOIN | back to summary |
|---|---|
| public static final int RIGHT_OUTER_JOIN An ANSI-style | |
| addRowSet | back to summary |
|---|---|
| public void addRowSet(Joinable rowset) throws SQLException Adds the given
This method should be used only when the given Note A
| |
| addRowSet | back to summary |
|---|---|
| public void addRowSet(RowSet rowset, int columnIdx) throws SQLException Adds the given This method should be used when RowSet does not already have a match column set.
| |
| addRowSet | back to summary |
|---|---|
| public void addRowSet(RowSet rowset, String columnName) throws SQLException Adds rowset to this
This method should be used when the given
| |
| addRowSet | back to summary |
|---|---|
| public void addRowSet(RowSet[] rowset, int[] columnIdx) throws SQLException Adds one or more
The first
This method should be used when the given
| |
| addRowSet | back to summary |
|---|---|
| public void addRowSet(RowSet[] rowset, String[] columnName) throws SQLException Adds one or more
The first
This method should be used when the given
| |
| getJoinType | back to summary |
|---|---|
| public int getJoinType() throws SQLException Returns a
| |
| getRowSetNames | back to summary |
|---|---|
| public String[] getRowSetNames() throws SQLException Returns a
| |
| getRowSets | back to summary |
|---|---|
| public Collection Returns a
| |
| getWhereClause | back to summary |
|---|---|
| public String getWhereClause() throws SQLException Return a SQL-like description of the WHERE clause being used
in a JoinRowSet object. An implementation can describe
the WHERE clause of the SQL
| |
| setJoinType | back to summary |
|---|---|
| public void setJoinType(int joinType) throws SQLException Allow the application to adjust the type of
| |
| supportsCrossJoin | back to summary |
|---|---|
| public boolean supportsCrossJoin() Indicates if CROSS_JOIN is supported by a JoinRowSet implementation
| |
| supportsFullJoin | back to summary |
|---|---|
| public boolean supportsFullJoin() Indicates if FULL_JOIN is supported by a JoinRowSet implementation
| |
| supportsInnerJoin | back to summary |
|---|---|
| public boolean supportsInnerJoin() Indicates if INNER_JOIN is supported by a JoinRowSet implementation
| |
| supportsLeftOuterJoin | back to summary |
|---|---|
| public boolean supportsLeftOuterJoin() Indicates if LEFT_OUTER_JOIN is supported by a JoinRowSet implementation
| |
| supportsRightOuterJoin | back to summary |
|---|---|
| public boolean supportsRightOuterJoin() Indicates if RIGHT_OUTER_JOIN is supported by a JoinRowSet implementation
| |
| toCachedRowSet | back to summary |
|---|---|
| public CachedRowSet toCachedRowSet() throws SQLException Creates a new
If any updates or modifications have been applied to the JoinRowSet
the CachedRowSet returned by the method will not be able to persist
it's changes back to the originating rows and tables in the
in the datasource. The CachedRowSet instance returned should not
contain modification data and it should clear all properties of
it's originating SQL statement. An application should reset the
SQL statement using the
In order to allow changes to be persisted back to the datasource
to the originating tables, the
| |