|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
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) 將空的 rowset 添加到此 JoinRowSet
物件,(2) 尚未設置 rowset 的比對列,或 (3) rowset 違反了活動狀態的 JOIN
Joinable.setMatchColumn(int)
void addRowSet(RowSet rowset, int columnIdx) throws SQLException
RowSet
物件添加到此 JoinRowSet
物件,並將指定的列設置為 RowSet
物件的比對列。如果該 RowSet
物件是第一個添加到此 JoinRowSet
物件中的物件,則它形成要建立的 JOIN
關係的基礎。
當尚未設置 RowSet 的比對列時才應使用此方法。
rowset
- 要添加到此 JoinRowSet
物件的 RowSet
物件;它可以實作 Joinable
介面columnIdx
- 一個 int
值,它標識要成為比對列的列
SQLException
- 如果 (1) rowset 是一個空 rowset 或 (2) rowset 違反了活動狀態的 JOIN
Joinable.unsetMatchColumn(int)
void addRowSet(RowSet rowset, String columnName) throws SQLException
JoinRowSet
物件,並將指定的列設置為比對列。如果 rowset 是第一個添加到此 JoinRowSet
物件中的物件,則它形成要建立的 JOIN
關係的基礎。
當給定的 RowSet
物件還沒有比對列時應該使用此方法。
rowset
- 要添加到此 JoinRowSet
物件的 RowSet
物件;它可以實作 Joinable
介面columnName
- String
物件,它提供要設置為比對列的列名
SQLException
- 如果 (1) rowset 是一個空 rowset 或 (2) rowset 的比對列不滿足 JOIN
的條件void addRowSet(RowSet[] rowset, int[] columnIdx) throws SQLException
RowSet
物件陣列中包含的一個或多個 RowSet
物件添加到此 JoinRowSet
物件,並且將每個 RowSet
物件的比對列設置為給定列索引陣列中的比對列。將 columnIdx 中的第一個元素設置為 rowset 中第一個 RowSet
物件的比對列,將 columnIdx 中的第二個元素設置為 rowset 中第二個元素的比對列,依此類別推。
添加到此 JoinRowSet
物件的第一個 RowSet
物件形成 JOIN
關係的基礎。
當給定的 RowSet
物件還沒有比對列時應該使用此方法。
rowset
- 要添加到 JOIN
的一個或多個 RowSet
物件所組成的陣列;它可以實作 Joinable
介面columnIdx
- 一個 int
值陣列,指示要設置為 rowset 中 RowSet
物件的比對列的列索引
SQLException
- 如果 (1) 將空的 rowset 添加到此 JoinRowSet
物件,(2) 沒有設置 rowset 中 RowSet
物件的比對列,或 (3) 要添加的 RowSet
物件違反了活動狀態的 JOIN
void addRowSet(RowSet[] rowset, String[] columnName) throws SQLException
RowSet
物件陣列中包含的一個或多個 RowSet
物件添加到此 JoinRowSet
物件,並且將每個 RowSet
物件的比對列設置為給定列名陣列中的比對列。將 columnName 中的第一個元素設置為 rowset 中第一個 RowSet
物件的比對列,將 columnName 中的第二個元素設置為 rowset 中第二個元素的比對列,依此類別推。
添加到此 JoinRowSet
物件的第一個 RowSet
物件形成 JOIN
關係的基礎。
當給定的 RowSet
物件還沒有比對列時應該使用此方法。
rowset
- 要添加到 JOIN
的一個或多個 RowSet
物件所組成的陣列;它可以實作 Joinable
介面columnName
- 一個 String
值陣列,指示要設置為 rowset 中 RowSet
物件的比對列的列名
SQLException
- 如果 (1) 將空的 rowset 添加到此 JoinRowSet
物件,(2) 沒有設置 rowset 中 RowSet
物件的比對列,或 (3) 要添加的 RowSet
物件違反了活動狀態的 JOIN
Collection<?> getRowSets() throws SQLException
Collection
物件,包含已經添加到此 JoinRowSet
物件的 RowSet
物件。此方法應該返回 JOIN
內包含的 'n' 個 RowSet 並維持此並集中出現的所有更新。
Collection
物件,由添加到此 JoinRowSet
物件的 RowSet
物件組成
SQLException
- 如果產生要返回的 Collection
物件時發生錯誤String[] getRowSetNames() throws SQLException
String
陣列,包含添加到此 JoinRowSet
物件的 RowSet
物件的名稱。
JoinRowSet
物件中的 RowSet
物件名所組成的 String
陣列
SQLException
- 如果獲取 RowSet
物件的名稱時發生錯誤CachedRowSet.setTableName(java.lang.String)
CachedRowSet toCachedRowSet() throws SQLException
JoinRowSet
物件中資料的新 CachedRowSet
物件,可以使用 CachedRowSet
物件的 SyncProvider
物件將此 JoinRowSet 物件保存到資料源。
如果對 JoinRowSet 進行了任何更新或修改,則該方法返回的 CachedRowSet 無法使其更改與資料源中的原始行和表保持一致。返回的 CachedRowSet 實例不應包含修改資料,並且應該清除其原始 SQL 語句的所有屬性。應用程序應該使用 RowSet.setCommand
方法重置 SQL 語句。
要允許更改與資料源中的原始表保持一致,應該使用 acceptChanges
方法並對 JoinRowSet 物件實例調用該方法。實作可以利用在其中追蹤的內部資料和更新來與 SyncProvider 進行交互,以保持所有更改不變。
SQLException
- 如果組合 CachedRowSet 物件時發生錯誤RowSet
,
CachedRowSet
,
SyncProvider
boolean supportsCrossJoin()
boolean supportsInnerJoin()
boolean supportsLeftOuterJoin()
boolean supportsRightOuterJoin()
boolean supportsFullJoin()
void setJoinType(int joinType) throws SQLException
JOIN
型別。如果實作不支持給定的 JOIN
型別,則應拋出 SQLException。
joinType
- SQL JOIN
的標準 JoinRowSet.XXX 靜態欄位定義,用來在運行過程中重新配置 JoinRowSet 實例。
SQLException
- 如果設置了不支持的 JOIN
型別getJoinType()
String getWhereClause() throws SQLException
JOIN
的 SQL 字元串描述或一個文本描述,一個實作可以描述 SQL JOIN
的 WHERE 子句,以協助應用程序使用 JoinRowSet
。
SQLException
- 如果產生 WHERE 子句的表示形式時發生錯誤。int getJoinType() throws SQLException
int
值,它描述控制此 JoinRowSet 實例的已設置 SQL JOIN
型別。返回的型別是標準的 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)
|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only。