- すべてのスーパー・インタフェース:
AutoCloseable
,Joinable
,ResultSet
,RowSet
,Wrapper
- 既知のすべてのサブインタフェース:
FilteredRowSet
,JoinRowSet
,WebRowSet
CachedRowSet
のすべての標準実装が実装しなければならないインタフェースです。
Oracle Corporationから提供されたCachedRowSet
インタフェースのリファレンス実装は、標準実装です。 開発者はこれをそのまま使用することも、拡張することも、またはこのインタフェースの実装を独自に作成することもできます。
CachedRowSet
オブジェクトは、メモリー内に行をキャッシュする、データ行のコンテナであり、常にそのデータ・ソースに接続していなくても処理を実行できます。 さらに、これはJavaBeansコンポーネントであり、スクロール可能、更新可能および直列化可能です。 CachedRowSet
オブジェクトには、通常、結果セットの行が格納されますが、スプレッドシートなど、表形式のあらゆるファイルの行を格納することもできます。 リファレンス実装は、ResultSet
オブジェクトからのデータの取得しかサポートしませんが、開発者は、その他の表形式のデータ・ソースにアクセスできるように、SyncProvider
実装を拡張することができます。
アプリケーションは、CachedRowSet
オブジェクト内のデータを変更できます。これらの変更は、データ・ソースにも反映されます。
CachedRowSet
オブジェクトは未接続の行セットです。つまり、データ・ソースとの接続を少ししか利用しません。 データ・ソースに接続するのは、データを読み取って自身に行を読み込むときと、配下のデータ・ソースに変更内容を反映するときだけです。 それ以外のときは、CachedRowSet
オブジェクトはデータの変更中も含めて、データ・ソースから切断されています。 RowSet
オブジェクトは、このように、データ・ソースから切断されているためムダが少なく、その他のコンポーネントに渡しやすくなっています。 たとえば、未接続のRowSet
オブジェクトを直列化し、回線経由でPDAなどのthinクライアントに渡すことができます。
1.0 CachedRowSet
オブジェクトの作成
次のコードは、リファレンス実装(RI)のCachedRowSet
のデフォルト・コンストラクタを使用して、デフォルトのCachedRowSet
オブジェクトを作成します。
CachedRowSetImpl crs = new CachedRowSetImpl();この新しい
CachedRowSet
オブジェクトは、そのプロパティをBaseRowSet
オブジェクトのデフォルトのプロパティに設定します。さらに、同期プロバイダとしてRIOptimisticProvider
オブジェクトを持ちます。 RIに含まれる2つのSyncProvider
実装のうちの1つ、RIOptimisticProvider
は、同期プロバイダが指定されていない場合にSyncFactory
シングルトンから提供されるデフォルトのプロバイダです。
SyncProvider
オブジェクトは、CachedRowSet
オブジェクトと、データ・ソースからデータを読み取って自身にデータを読み込むリーダー(RowSetReader
オブジェクト)を提供します。 リーダーを実装することにより、ResultSet
オブジェクトや表形式のファイルからデータを読み取ることができます。 SyncProvider
オブジェクトは、ライター(RowSetWriter
オブジェクト)も提供します。ライターは、配下のデータ・ソース内のデータから切断されている間にCachedRowSet
オブジェクトのデータに加えられた変更内容を同期します。
ライターを実装することにより、さまざまなレベルで、競合のチェックや予防を行うことができます。 (競合は、行セットに値を読み込んだあとでデータ・ソース内の値が変更された場合に発生します。) RIOptimisticProvider
実装は、競合がほとんどないか、まったくないものとして、ロックを一切設定しません。 この実装は、競合がない場合にのみ、CachedRowSet
オブジェクトの値でデータ・ソースを更新します。 変更されたデータをデータ・ソースへ書き込む目的でのみ実装されるライターもあります。この実装は、競合のチェックを行わないか、そのまったく逆で、データ・ソース内のデータの変更を十分防げるだけのロックを設定することによって行われます。 また、そのほぼ中間のライター実装もあります。
CachedRowSet
オブジェクトは、SyncFactory
シングルトンに登録された任意のSyncProvider
実装を使用できます。 アプリケーションは、次のコードを呼び出すことにより、登録されているSyncProvider
実装を検出できます。
java.util.Enumeration providers = SyncFactory.getRegisteredProviders();
CachedRowSet
オブジェクトで使用するSyncProvider
オブジェクトを指定する方法は、次の2とおりです。
- コンストラクタに実装名を提供する
次のコードは、デフォルト値(ただしSyncProvider
を指定)で初期化されるCachedRowSet
オブジェクトcrs2を作成します。CachedRowSetImpl crs2 = new CachedRowSetImpl( "com.fred.providers.HighAvailabilityProvider");
CachedRowSet
メソッドsetSyncProvider
を使ってSyncProvider
を設定する
次のコードは、crsのSyncProvider
オブジェクト(デフォルトのコンストラクタで作成されたCachedRowSet
オブジェクト)をリセットします。crs.setSyncProvider("com.fred.providers.HighAvailabilityProvider");
SyncFactory
およびSyncProvider
のコメントを参照してください。
2.0 CachedRowSet
オブジェクトからのデータの取得
データは、ResultSet
インタフェースから継承された取得メソッドを使用して、CachedRowSet
オブジェクトから取得されます。 次の例は、crs
をCachedRowSet
オブジェクトとして行の反復処理を行い、各行から列の値を取得する方法を示します。 最初の例では、列番号を取る取得メソッドを使用します。2番目の例では、列名を取る取得メソッドを使用します。 列番号は通常、RowSet
オブジェクトのコマンドがSELECT * FROM TABLENAME
の形式になる場合に使用されます。列名は、列名を指定するコマンドでよく使用されます。
while (crs.next()) { String name = crs.getString(1); int id = crs.getInt(2); Clob comment = crs.getClob(3); short dept = crs.getShort(4); System.out.println(name + " " + id + " " + comment + " " + dept); }
while (crs.next()) { String name = crs.getString("NAME"); int id = crs.getInt("ID"); Clob comment = crs.getClob("COM"); short dept = crs.getShort("DEPT"); System.out.println(name + " " + id + " " + comment + " " + dept); }
2.1 RowSetMetaData
の取得
アプリケーションは、RowSetMetaData
オブジェクト上にResultSetMetaData
メソッドとRowSetMetaData
メソッドを呼び出すことにより、CachedRowSet
オブジェクト内の列に関する情報を取得できます。 次のコードの抜粋では、crsをCachedRowSet
オブジェクトとして、この処理について説明します。 1行目では、crs内の列に関する情報を持つRowSetMetaData
オブジェクトを作成します。 ResultSet
インタフェースから継承されたgetMetaData
メソッドは、ResultSetMetaData
オブジェクトを返します。返されたオブジェクトは、変数rsmdに割り当てられる前にRowSetMetaData
オブジェクトにキャストされます。 2行目では、jrsの列数を確認します。3行目では、jrs
の2番目の列に格納された値のJDBC型を取得します。
RowSetMetaData rsmd = (RowSetMetaData)crs.getMetaData(); int count = rsmd.getColumnCount(); int type = rsmd.getColumnType(2);
RowSetMetaData
インタフェースは、次の2つの点で、ResultSetMetaData
インタフェースとは異なっています。
setter
メソッドを含む:RowSet
オブジェクトは、別のResultSet
オブジェクトのデータを読み込む際、これらのメソッドを内部で使用します。- 含まれる
getter
メソッドが少なくなっています。ResultSetMetaData
の一部のメソッドはRowSet
オブジェクトには適用されません。 たとえば、列の値が書込み可能であるか読取り専用であるかを確認するメソッドは適用されません。これは、RowSet
オブジェクトのすべての列は、行セットの更新が可能な場合は書込み可能、行セットの更新ができない場合は読取り専用であるからです。
RowSetMetaData
オブジェクトを返すためには、実装でjava.sql.ResultSet
に定義されたgetMetaData()
メソッドをオーバーライドし、RowSetMetaData
オブジェクトを返す必要があります。
3.0 CachedRowSet
オブジェクトの更新
CachedRowSet
オブジェクトの更新方法はResultSet
オブジェクトの更新方法と同様ですが、更新中、行セットはデータ・ソースに接続していないので、配下のデータ・ソースに変更を加える追加ステップが必要になります。 CachedRowSet
オブジェクトは、updateRow
メソッドかinsertRow
メソッドを呼び出したあと、acceptChanges
メソッドを呼び出して、更新内容をデータ・ソースに書き込む必要があります。 次の例では、CachedRowSet
オブジェクトcrs内の行にカーソルが置かれています。このコードは、現在の行の2つの列の値を更新し、RowSet
オブジェクトの配下のデータ・ソースを更新します。
crs.updateShort(3, 58); crs.updateInt(4, 150000); crs.updateRow(); crs.acceptChanges();
次の例では、挿入行に移動し、挿入行の上に新しい行を作成して、これを行セットに挿入します。さらに、acceptChanges
メソッドを呼び出して、配下のデータ・ソースに新しい行を追加します。 取得メソッドの場合と同様に、更新メソッドでも、列インデックスか列名を使用して処理対象の列を指定できます。
crs.moveToInsertRow(); crs.updateString("Name", "Shakespeare"); crs.updateInt("ID", 10098347); crs.updateShort("Age", 58); crs.updateInt("Sal", 150000); crs.insertRow(); crs.moveToCurrentRow(); crs.acceptChanges();
ノート: insertRow()
メソッドで、CachedRowSet
オブジェクトの挿入行の内容を挿入する場所は、実装で定義します。 CachedRowSet
インタフェースのリファレンス実装は、現在の行の直後に新しい行を挿入しますが、ほかの任意の箇所にも挿入するように実装できます。
これらの例におけるacceptChanges
メソッドの使用方法に注目してください。 このメソッドは、RowSet
オブジェクトのライターを内部で呼び出し、データ・ソースに変更を書き込むことにより、CachedRowSet
オブジェクト内の変更内容を配下のデータ・ソースへ伝達します。 このために、ライターは、データ・ソースとの接続を確立しなければいけません。 最初の2つのコードの抜粋は、updateRow
またはinsertRow
の呼出し後ただちにacceptChanges
メソッドを呼び出します。 しかし、複数の行を変更する場合は、updateRow
とinsertRow
の呼出しがすべて完了してからacceptChanges
を呼び出す方法のほうが効率がよくなります。 acceptChanges
を1回しか呼び出さない場合は、接続を1つ確立するだけで済みます。
4.0 配下のデータ・ソースの更新
acceptChanges
メソッドの実行時には、行セットへの変更点を配下のデータ・ソースへ書き込むため、背後でCachedRowSet
オブジェクトのライター、RowSetWriterImpl
オブジェクトが呼び出されます。 このライターが実装されることにより、データ・ソースへの接続が確立され、更新情報が書き込まれます。
ライターは、セクション1の「CachedRowSet
オブジェクトの作成」で説明したとおり、SyncProvider
インタフェースの実装を介して利用できます。 デフォルトのリファレンス実装プロバイダRIOptimisticProvider
は、オプティミスティック並行処理制御メカニズムを利用するため、ライターを実装しています。 つまり、行セットがデータベースから切断されている間、配下のデータベースはロックされず、データ・ソースへデータを書き込む前に競合がないかどうかの確認が行われるだけとなります。 競合がある場合、データ・ソースへは何も書き込まれません。
SyncProvider
クラスによって提供されるリーダー/ライターの機能は、プラグイン可能であり、データの取得と更新のカスタマイズに利用できます。 別の並行処理制御メカニズムが必要な場合は、setSyncProvider
メソッドを使って、別のSyncProvider
実装をプラグインできます。
楽観的同時実行制御ルーチンを使用するために、RIOptimisticProvider
は、現在の値と元の値(現在の値の直前にあった値)の両方を維持します。 RowSet
オブジェクト内のデータが変更されなかった場合、現在の値と元の値は同一(RowSet
オブジェクトが最初に生成されたときの値)になります。 しかし、RowSet
オブジェクト内の値が変更された場合、現在の値と元の値は一致しません。この段階では、元の値は初期値のままです。 その後のRowSet
オブジェクト内のデータの変更により、元の値と現在の値は一致しなくなりますが、以前現在の値だった値が元の値になります。
元の値を追跡することで、ライターは、RowSet
オブジェクトの元の値とデータベース内の値を比較できます。 データベース内の値がRowSet
オブジェクトの元の値と一致しない場合、データベース内の値が変更されており、競合が発生していることを意味します。 ライターを使って競合のチェックを行うか、どの程度までチェックを行うか、競合をどのように処理するかは、すべて実装によって異なります。
5.0 リスナーの登録と通知
JavaBeansコンポーネントなので、すべての行セットは、BaseRowSet
クラスからリスナーを登録して変更内容を通知するためのメソッドを継承して、JavaBeansイベント・モデルに参与します。 CachedRowSet
オブジェクトのリスナーは、行セット内に変更があったかどうかを通知されるコンポーネントです。 たとえば、CachedRowSet
オブジェクトにクエリーの結果が含まれ、これらの結果が表や棒グラフとして表示されるとします。表や棒グラフは、行セットのリスナーとして登録されることで、変更内容を反映するよう自身の更新を行うことができます。 表および棒グラフのクラスがリスナーになるには、RowSetListener
インタフェースを実装する必要があります。 その後、これらをCachedRowSet
オブジェクトのリスナーのリストに追加します。次のコードを参照してください。
crs.addRowSetListener(table); crs.addRowSetListener(barGraph);カーソルを移動したり、データを変更したりする
CachedRowSet
メソッドも、登録済みのリスナーに変更を通知します。したがって、crs
内に変更があると、table
とbarGraph
はその通知を受けます。
6.0 thinクライアントへのデータの送信
CachedRowSet
オブジェクトは、主に、アプリケーション・コンポーネント間でのデータの受け渡しに利用されます。 CachedRowSet
オブジェクトは直列化可能なので、たとえば、サーバー環境で稼動中のエンタープライズJavaBeansコンポーネントによって実行されたクエリーの結果を、Webブラウザで稼動中のクライアントに、ネットワーク経由で送信するために利用することができます。
未接続のCachedRowSet
オブジェクトは、同じデータを持つResultSet
オブジェクトよりもずっとコンパクトである可能性があります。 このため、特にリソースの制限やセキュリティ上の理由によりJDBCドライバを使用するのが難しいPDAなどのthinクライアントへのデータ送信に最適である可能性があります。 このように、CachedRowSet
オブジェクトでは、JDBC APIを完全に実装しなくても行を取得できます。
7.0 スクロールと更新
CachedRowSet
オブジェクトには、スクロール機能や更新機能を持たないResultSet
オブジェクトにこれらの機能を提供する働きもあります。 DBMSがスクロールと更新の機能をフルサポートしない場合は、CachedRowSet
オブジェクトを使用して、JDBCテクノロジを使用可能なドライバの機能を向上させることができます。 スクロール不可能で読み取り専用のResultSet
オブジェクトをスクロール可能かつ更新可能にする効果を達成するために、プログラマは、そのResultSet
オブジェクト・データで作成されたCachedRowSet
オブジェクトを作成するだけで済みます。 具体例については、次のコードの抜粋を参照してください。この例では、stmt
はStatement
オブジェクトを表します。
ResultSet rs = stmt.executeQuery("SELECT * FROM EMPLOYEES"); CachedRowSetImpl crs = new CachedRowSetImpl(); crs.populate(rs);
rs
オブジェクトの場合と同様に、crs
オブジェクトに、表EMPLOYEES
のデータが追加されます。 ただし、crs
のカーソルは前方、後方または特定の行に移動できるのに対して、rs
のカーソルは前方にしか移動できません。 また、crs
に更新機能があるのに対して、rs
には更新機能はありません。これは、CachedRowSet
オブジェクトに、スクロール機能と更新機能がデフォルトで用意されているからです。
つまり、CachedRowSet
オブジェクトは、データ・ソースの外部でキャッシュされる未接続の行になります。 サイズが小さく、直列化可能なので、回線経由で簡単に送信できるだけでなく、thinクライアントへのデータ送信にも適しています。 ただし、メモリー内に同時に格納できるデータ量が決まっているため、CachedRowSet
オブジェクトのサイズは制限されています。
8.0 汎用データ・アクセスの取得
CachedRowSet
クラスには、リレーショナル・データベース以外のソースからデータを取得し、格納できるという利点があります。 行セットのリーダーを実装することにより、任意の表形式のデータ・ソース(スプレッドシート、フラット・ファイルを含む)行セットのデータを読み取り、読込みできます。 CachedRowSet
オブジェクトとそのメタデータは、いずれもゼロから作成可能なので、行セットのファクトリとして機能するコンポーネントは、この機能を利用して、非SQLデータ・ソースからデータを含む行セットを作成できます。 しかし、ほとんどの場合、CachedRowSet
オブジェクトは、JDBC APIを使ってSQLデータベースから取得したデータを格納します。
9.0 プロパティの設定
どの行セットも必ず一連のプロパティを保持しますが、それらのプロパティは通常、ツールを使用して設定されます。 行セットのプロパティの数と種類は、行セットの機能とデータの取得方法によって異なります。 たとえば、ResultSet
オブジェクトからデータを取得する行セットでは、データベース接続に必要なプロパティを設定する必要があります。 行セットがDriverManager
機能を使用して接続を作成する場合は、適切なドライバを識別するJDBC URLのプロパティと、ユーザー名とパスワードを指定するプロパティを設定する必要があります。 一方、推奨の方法であるDataSource
オブジェクトを使用して接続を行う行セットでは、JDBC URLのプロパティを設定する必要はありません。 かわりに、データ・ソースの論理名のプロパティ、およびユーザー名とパスワードのプロパティを設定する必要があります。
NOTE: 接続にDataSource
オブジェクトを使用するには、Java Naming and Directory Interface (JNDI) APIを使用するネーミング・サービスにDataSource
オブジェクトが登録されている必要があります。 登録は通常、システム管理者が行います。
行セットにデータベースのデータを読み込むには、コマンド・プロパティを設定する必要があります。 このプロパティは、PreparedStatement
オブジェクトを表すクエリーです。これにより、クエリーは、設計時ではなく実行時に設定されるパラメータ・プレースホルダーを持つことができます。 これらのプレースホルダー・パラメータに値を設定するため、行セットは、各データ型の値を設定する設定メソッドを提供します。これらの設定メソッドは、PreparedStatement
インタフェースによって提供される設定メソッドとよく似ています。
次のコードの抜粋は、CachedRowSet
オブジェクトcrs
にコマンド・プロパティを設定する方法を示しています。 ツールを使ってプロパティを設定する場合、このコードを使用します。
crs.setCommand("SELECT FIRST_NAME, LAST_NAME, ADDRESS FROM CUSTOMERS " +
"WHERE CREDIT_LIMIT > ? AND REGION = ?");
コマンドのプレースホルダー・パラメータの設定に使用される値は、RowSet
オブジェクトのparams
フィールドに、Vector
オブジェクトとして格納されます。 CachedRowSet
クラスは、params
フィールド内の要素を設定する設定メソッドのセットを提供します。 次のコードの抜粋は、先ほどの例で、クエリー内の2つのパラメータを設定する方法を示しています。
crs.setInt(1, 5000); crs.setString(2, "West");
params
フィールドに2つの要素が追加されました。これらはそれぞれ、要素2つ分の長さの配列になります。 最初の要素はパラメータ番号、2番目の要素は設定する値を表します。 この場合、params
の最初の要素は1
, 5000
、2番目の要素は2
, "West"
になります。 アプリケーションは、execute
メソッドを呼び出すことにより、このRowSet
オブジェクトのリーダーを呼び出します。これにより、そのreadData
メソッドが呼び出されます。 この実装に含まれるreadData
は、params
内の値を取得し、これらを使用してコマンドのプレースホルダー・パラメータを設定します。 次のコードの抜粋では、Connection
オブジェクトcon
の取得後に、リーダーがプレースホルダー・パラメータを設定する手順を示します。
PreparedStatement pstmt = con.prepareStatement(crs.getCommand());
reader.decodeParams();
// decodeParams figures out which setter methods to use and does something
// like the following:
// for (i = 0; i < params.length; i++) {
// pstmt.setObject(i + 1, params[i]);
// }
この時点で、crs
のコマンドは、クエリー"SELECT FIRST_NAME, LAST_NAME, ADDRESS FROM CUSTOMERS WHERE CREDIT_LIMIT> 5000 AND REGION = "West"
になります。 readData
メソッドは、次のコードでこのコマンドを実行することにより、crs
に読み込まれるrs
のデータを取得します。
ResultSet rs = pstmt.executeQuery();
前のコードの抜粋では、背後で行われる処理について説明しました。これらのコードは、アプリケーション内では非表示であり、readData
やdecodeParams
などのメソッドを呼び出しません。 これに対し、次のコードはアプリケーション内で行われる処理を示したものです。 行セットのコマンドを設定し、コマンドのパラメータを設定し、コマンドを実行しています。 execute
メソッドを呼び出すだけで、crs
に、要求された表CUSTOMERS
のデータが読み込まれます。
crs.setCommand("SELECT FIRST_NAME, LAST_NAME, ADDRESS FROM CUSTOMERS" +
"WHERE CREDIT_LIMIT > ? AND REGION = ?");
crs.setInt(1, 5000);
crs.setString(2, "West");
crs.execute();
10.0 ページング・データ
CachedRowSet
オブジェクトはデータをメモリーに格納するため、一度に格納できるデータの量は使用可能なメモリーの量によって決まります。 この制限を回避するため、CachedRowSet
オブジェクトでは、ResultSet
オブジェクトからページと呼ばれるチャンクで、データを取得できます。 このメカニズムを利用するには、アプリケーションで、setPageSize
メソッドを使用して、ページに含める行数を設定します。 つまり、ページ・サイズを5に設定している場合、データ・ソースから一度に5行のデータのチャンクがフェッチされます。 また、アプリケーションでは、オプションで、一度にフェッチできる最大行数も設定できます。 最大行数を0に設定した場合、または最大行数を設定しない場合、一度にフェッチ可能な行数の制限はありません。
プロパティの設定後、CachedRowSet
オブジェクトに、populate
またはexecute
メソッドを使用して、データを格納する必要があります。 次のコード行に、populate
メソッドを使用した例を示します。 このメソッドでは、ResultSet
ハンドルと、行の取得を開始するResultSet
オブジェクト内の行の2つのパラメータをとります。
CachedRowSet crs = new CachedRowSetImpl(); crs.setMaxRows(20); crs.setPageSize(4); crs.populate(rsHandle, 10);このコードを実行すると、crsにrsHandleの10行目から始まる4行分が格納されます。
次のコードの抜粋にexecute
メソッドを使用して、CachedRowSet
オブジェクトに格納する例を示します。このメソッドはパラメータとしてConnection
オブジェクトをとる場合ととらない場合があります。 このコードではexecute
にConnection
オブジェクトconHandleを渡しています。
次のコードの抜粋と上記のコードには2つの違いがあります。 まず、setMaxRows
メソッドを呼び出していないため、crsに格納できる最大行数に制限がありません。 (crsには常に、メモリー内に格納できるデータ量の制限が最優先で存在することに注意してください)。 2点目の違いはexecute
メソッドに、行の取得を開始するResultSet
オブジェクト内からの行番号を渡せないことです。 このメソッドは常に先頭行から開始します。
CachedRowSet crs = new CachedRowSetImpl(); crs.setPageSize(5); crs.execute(conHandle);このコードを実行すると、crsに対するコマンドによって生成された
ResultSet
オブジェクトから5行分のデータがcrsに格納されます。 crsライターはconHandleを使用してデータ・ソースに接続し、crsに対してコマンドを実行します。 これにより、アプリケーションは、ほかのCachedRowSet
オブジェクトのデータの操作と同じようにcrsのデータを操作できます。
アプリケーションで次のページ(データのチャンク)にアクセスするには、nextPage
メソッドを呼び出します。 このメソッドは新しいCachedRowSet
オブジェクトを作成し、それに次のページのデータを格納します。 たとえば、CachedRowSet
オブジェクトのコマンドが1000行分のデータを格納するResultSet
オブジェクトrsを返したとします。 ページ・サイズが100に設定されている場合、nextPage
メソッドの最初の呼出しで、rsの先頭の100行を格納するCachedRowSet
オブジェクトが作成されます。 この先頭の100行のデータの処理が終わったら、アプリケーションはふたたびnextPage
メソッドを呼び出して、rsから次の100行を格納する別のCachedRowSet
オブジェクトを作成できます。 最初のCachedRowSet
オブジェクトのデータは、2番目のCachedRowSet
オブジェクトのデータに置き換えられているため、メモリー内に残っていません。 nextPage
メソッドの10回目の呼出しでは、10番目のCachedRowSet
オブジェクトにrsからの最後の100行のデータが格納され、これらがメモリーに格納されます。 常にメモリーには、1つのCachedRowSet
オブジェクトのデータだけが格納されることになります。
nextPage
メソッドは、現在のページが行の最後のページでない間はtrue
を返し、それ以降のページがなくなるとfalse
を返します。 したがって、次のコード行に示すように、while
ループで使用すれば、すべてのページを取得できます。
CachedRowSet crs = CachedRowSetImpl(); crs.setPageSize(100); crs.execute(conHandle); while(crs.nextPage()) { while(crs.next()) { . . . // operate on chunks (of 100 rows each) in crs, // row by row } }このコードの抜粋を実行すると、アプリケーションは1000行をすべてトラバースしますが、メモリーには一度に100行までしか格納されません。
CachedRowSet
インタフェースはpreviousPage
メソッドも定義しています。 nextPage
メソッドがResultSet
のnext
メソッドに類似しているのと同様、previousPage
メソッドはResultSet
のprevious
メソッドに似ています。 nextPage
メソッドと同様に、previousPage
はページ・サイズとして設定されただけの行数を格納するCachedRowSet
オブジェクトを作成します。 そのため、たとえば、前述のコードの抜粋の最後のwhile
ループ内でpreviousPage
メソッドを使用して、最後のページから先頭のページまで、逆にページを移動できます。 previousPage
メソッドは、while
ループで使用できる点でnextPage
とも似ています。ただし、前に別のページが存在する間true
を返し、それ以前のページがなくなると、false
を返す点が異なります。
次のコードの抜粋に示すように、previous
メソッドは各ページの最後の行の末尾にカーソルを置くことにより、各ページの最終行から先頭行まで移動します。 もしくは、各ページの先頭行の前にカーソルを置き、while
ループでnext
メソッドを使用して、各ページの先頭行から最終行まで移動することもできます。
次のコードの抜粋では、上記のコードの抜粋の続きで、10個目のCachedRowSet
オブジェクトのカーソルが最後の行にあると仮定しています。 このコードではカーソルを最終行のあとに移動しているため、previous
メソッドの最初の呼出しで、カーソルを最終行に戻します。 最後のページ(CachedRowSet
オブジェクトcrs)のすべての行を移動すると、コードはwhile
ループに入り、9ページ目に移動し、逆方向に行を移動し、8ページ目に移動し、逆方向に行を移動し、同様にして先頭ページの先頭行まで進んでいきます。
crs.afterLast(); while(crs.previous()) { . . . // navigate through the rows, last to first { while(crs.previousPage()) { crs.afterLast(); while(crs.previous()) { . . . // go from the last row to the first row of each page } }
- 導入されたバージョン:
- 1.5
-
フィールドのサマリー
修飾子と型フィールド説明static final boolean
非推奨。このフィールドはfinal (インタフェースの一部)であるため、その値を変更することはできません。インタフェース 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
-
メソッドのサマリー
修飾子と型メソッド説明void
このCachedRowSet
オブジェクトに対する行の更新、挿入、削除などの変更を配下のデータ・ソースへ伝達します。void
acceptChanges
(Connection con) 指定されたConnection
オブジェクトを使ってデータ・ソースへの接続を確立して、CachedRowSet
オブジェクトの配下のデータ・ソースへ行の更新、挿入、削除などの変更をすべて伝達します。boolean
columnUpdated
(int idx) このCachedRowSet
オブジェクトの現在の行内の指定された列が更新されたかどうかを示します。boolean
columnUpdated
(String columnName) このCachedRowSet
オブジェクトの現在の行内の指定された列が更新されたかどうかを示します。void
commit()
CachedRowSet
オブジェクトのSyncProvider
には、ResultSet
のConnection
オブジェクトか、コンストラクタに渡されるJDBCプロパティが含まれます。このCachedRowSet
オブジェクトのデータのディープ・コピーであるRowSet
オブジェクトを作成します。このCachedRowSet
オブジェクトのデータのディープ・コピーであるが、独立しているCachedRowSet
オブジェクトを作成します。このCachedRowSet
オブジェクトの空のコピーであるCachedRowSet
オブジェクトを作成します。このCachedRowSet
オブジェクトと同じデータによって、バックアップされた新しいRowSet
オブジェクトを返します。void
execute
(Connection conn) データ・ソースとなる結果セットを生成するための指定の接続を使用して、このCachedRowSet
オブジェクトにデータを読み込みます。int[]
このCachedRowSet
オブジェクトの行を一意に識別するキーを構成する列を示す1つ以上の列番号を格納する配列を返します。このCachedRowSet
オブジェクトの元の値を格納するResultSet
オブジェクトを返します。このCachedRowSet
オブジェクトの現在行の元の値のみを格納するResultSet
オブジェクトを返します。int
CachedRowSet
オブジェクトのページ・サイズを返します。このRowSet
オブジェクトに関する呼出しによって報告される最初の警告を取得します。boolean
削除マークが付けられた行を現在の行とともに表示するかどうかを示すboolean
を取得します。このCachedRowSet
オブジェクトのSyncProvider
実装を取得します。このCachedRowSet
オブジェクトの作成に使用されたオブジェクト(テーブル)の識別子を返します。boolean
nextPage()
CachedRowSet
の現在のページを増分します。void
このCachedRowSet
オブジェクトに、指定されたResultSet
オブジェクトのデータを読み込みます。void
このCachedRowSet
オブジェクトに、指定されたResultSet
オブジェクトのデータを読み込みます。boolean
CachedRowSet
の現在のページを減分します。void
release()
このCachedRowSet
オブジェクトの現在のコンテンツを解放し、登録済みのすべてのリスナーにrowSetChanged
イベントを送信します。void
このCachedRowSet
オブジェクトを元の値(前回の変更セットの前の値)に戻します。void
rollback()
CachedRowSet
オブジェクトのSyncProvider
には、元のResultSet
のConnection
オブジェクトか、それに渡されるJDBCプロパティが含まれます。void
CachedRowSet
オブジェクトのSyncProvider
には、元のResultSet
のConnection
オブジェクトか、それに渡されるJDBCプロパティが含まれます。void
rowSetPopulated
(RowSetEvent event, int numRows) 登録済みリスナーに、指定されたRowSetEventオブジェクト内のRowSetオブジェクトが多数の追加行を読み込んだことを通知します。void
setKeyColumns
(int[] keys) このCachedRowSet
オブジェクトのkeyCols
フィールドに、指定された列番号の配列(このCachedRowSet
オブジェクト内の行を一意に識別するキーを構成する)を設定します。void
指定されたRowSetMetaData
オブジェクトを使って、CachedRowSet
オブジェクトのメタデータを設定します。void
このCachedRowSet
オブジェクトの現在の行を元の行として設定します。void
setPageSize
(int size) CachedRowSet
オブジェクトのページ・サイズを設定します。void
setShowDeleted
(boolean b) showDeleted
プロパティとして、削除マーク付きの行を現在の行とともに表示するかどうかを指定するboolean
を設定します。void
setSyncProvider
(String provider) このCachedRowSet
オブジェクトのSyncProvider
オブジェクトを、指定されたオブジェクトに設定します。void
setTableName
(String tabName) このCachedRowSet
オブジェクトの派生元のテーブルの識別子を、指定のテーブル名に設定します。int
size()
このCachedRowSet
オブジェクト内の行数を返します。Collection<?>
このCachedRowSet
オブジェクトを、このCachedRowSet
オブジェクトのすべてのデータを格納するCollection
オブジェクトに変換します。Collection<?>
toCollection
(int column) このCachedRowSet
オブジェクト内の指定された列をCollection
オブジェクトに変換します。Collection<?>
toCollection
(String column) このCachedRowSet
オブジェクト内の指定された列をCollection
オブジェクトに変換します。void
現在の行の削除を取り消して、リスナーに行が変更されたことを通知します。void
もし行が挿入された状態であれば、CachedRowSet
オブジェクトから現在の行をただちに削除し、リスナーに行が変更されたことを通知します。void
もし行が変更されていれば、前回の更新操作をただちに元に戻します。インタフェース 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
-
フィールド詳細
-
COMMIT_ON_ACCEPT_CHANGES
@Deprecated static final boolean COMMIT_ON_ACCEPT_CHANGES非推奨。このフィールドはfinal (インタフェースの一部)であるため、その値を変更することはできません。acceptChanges()
の呼出し時に、CachedRowSet
オブジェクトのSyncProvider
に変更をコミットさせます。 falseに設定されている場合、変更内容は、CachedRowSet
インタフェース・トランザクション・メソッドが呼び出されるまでコミットされません。- 関連項目:
-
-
メソッドの詳細
-
populate
void populate(ResultSet data) throws SQLException このCachedRowSet
オブジェクトに、指定されたResultSet
オブジェクトのデータを読み込みます。このメソッドは、アプリケーションがオープンしている
ResultSet
オブジェクトに接続しているときexecute
メソッドの代替として使用できます。 新しい接続を開いてこのCachedRowSet
オブジェクトのコマンドを再実行する必要がない点で、populate
メソッドは、パラメータを取らないexecute
メソッドよりも効率的です。 また、populate
メソッドを使用することは、ResultSet
オブジェクトを取るexecute
メソッドよりも便利です。- パラメータ:
data
- このCachedRowSet
オブジェクトに読み込むデータを含むResultSet
オブジェクト- 例外:
SQLException
- nullのResultSet
オブジェクトが提供された場合、またはこのCachedRowSet
オブジェクトが関連するResultSetMetaData
オブジェクトを取得できない場合- 関連項目:
-
execute
void execute(Connection conn) throws SQLException データ・ソースとなる結果セットを生成するための指定の接続を使用して、このCachedRowSet
オブジェクトにデータを読み込みます。 このメソッドは、作成するすべてのデータベース接続をクローズすることで、データ・ソースからデータを読み取っているときとデータ・ソースへデータを書き込んでいるとき以外、このCachedRowSet
オブジェクトが未接続の状態であることを保証します。この
CachedRowSet
オブジェクトのリーダーは、行セットのコマンドを実行し、結果として生成されるResultSet
オブジェクトからこのCachedRowSet
オブジェクトにデータを読み込むために、connを使ってデータ・ソースへの接続を確立します。 また、このメソッドは、このCachedRowSet
オブジェクトの生成後に、connをクローズします。実装の生成後にこのメソッドを呼び出すと、コンテンツとメタデータがリセットされます。 また、
acceptChanges
メソッドを呼び出して、まだ適用していない更新を確定したあと、このメソッドを呼び出すと、更新内容は失われます。- パラメータ:
conn
- 有効なプロパティを持つ標準JDBCConnection
オブジェクト- 例外:
SQLException
- 無効なConnection
オブジェクトが提供された場合、またはデータ・ソースとの接続の確立時にエラーが発生した場合- 関連項目:
-
acceptChanges
void acceptChanges() throws SyncProviderExceptionこのCachedRowSet
オブジェクトに対する行の更新、挿入、削除などの変更を配下のデータ・ソースへ伝達します。このメソッドは、この
CachedRowSet
オブジェクトのライター上で呼び出され、背後で処理を行います。 標準CachedRowSet
実装は、SyncFactory
シングルトンを使ってSyncProvider
インスタンスを取得することにより、RowSetWriter
オブジェクト(ライター)を提供します。 ライターは、このCachedRowSet
オブジェクトへの変更をデータ・ソースへ返送しようとします。acceptChanges
メソッドが正常に実行された場合、データ・ソースへ変更が書き込まれ、現在の行の値が元の行の値に変更されます。使用する
SyncProvider
実装の同期レベルによって、ライターは元の値とデータ・ソース内の値を比較し、競合のチェックを行います。 競合が検出された場合、たとえばRIOptimisticProvider
実装は、SyncProviderException
をスローし、データ・ソースへは何も書き込みません。アプリケーションは、
SyncProviderException
オブジェクトをキャッチし、このオブジェクトに含まれるSyncResolver
オブジェクトを取得することができます。SyncResolver
オブジェクトは、行ごとに競合を一覧し、現在存在する競合を解決するまで新しい競合が発生しないように、データ・ソースをロックします。 さらに、個々の競合に対して、競合を検査し、データ・ソースに残す値を設定するメソッドを提供します。 すべての競合が解決されると、アプリケーションは再度acceptChanges
メソッドを呼び出して、解決された値をデータ・ソースへ書き込む必要があります。 データ・ソース内のすべての値がすでに持続値である場合、acceptChanges
メソッドは何も行いません。一部のプロバイダ実装は、競合を防ぐためにロックを使用します。 この場合、
acceptChanges
メソッドを呼び出したとき、ライターによるデータ・ソースへの変更の書込みは必ず成功します。 このメソッドは、updateRow
メソッド、insertRow
メソッド、またはdeleteRow
メソッドの呼出し後ただちに呼び出せますが、すべての変更が完了して、1つだけ接続を確立すればよい状態で呼び出したほうが効率的です。ノート:
acceptChanges()
メソッドは、COMMIT_ON_ACCEPT_CHANGES
がtrueに設定されているかどうかを判断します。 trueに設定されている場合、同期内のすべての更新がデータ・ソースにコミットされます。 それ以外の場合は、アプリケーションがcommit()
またはrollback()
メソッドを適切に呼び出す必要があります。- 例外:
SyncProviderException
- 配下の同期プロバイダのライターが、データ・ソースへの更新の書込みに失敗した場合- 関連項目:
-
acceptChanges
void acceptChanges(Connection con) throws SyncProviderException 指定されたConnection
オブジェクトを使ってデータ・ソースへの接続を確立して、CachedRowSet
オブジェクトの配下のデータ・ソースへ行の更新、挿入、削除などの変更をすべて伝達します。もう一方の
acceptChanges
メソッドはRowSet
オブジェクト内にすでに定義されているConnection
オブジェクト(初期生成時に使用される接続)を使用するので、接続を渡されません。この形式の
acceptChanges
メソッドは、引数を取らない形式とよく似ていますが、配下のデータ・ソースがJDBCデータ・ソースである場合にしか使用できない点で、その他の形式とは異なります。SyncProvider
は、CachedRowSet
オブジェクトが正常に同期されるように、更新されたConnection
プロパティを使ってRowSetWriter
構成をリセットする必要があります。acceptChanges
メソッドが正常に実行された場合、データ・ソースへ変更が書き込まれ、現在の行の値が元の行の値に変更されます。使用する
SyncProvider
実装の同期レベルによって、ライターは元の値とデータ・ソース内の値を比較し、競合のチェックを行います。 競合が検出された場合、たとえばRIOptimisticProvider
実装は、SyncProviderException
をスローし、データ・ソースへは何も書き込みません。アプリケーションは、
SyncProviderException
オブジェクトをキャッチし、このオブジェクトに含まれるSyncResolver
オブジェクトを取得することができます。SyncResolver
オブジェクトは、行ごとに競合を一覧し、現在存在する競合を解決するまで新しい競合が発生しないように、データ・ソースをロックします。 さらに、個々の競合に対して、競合を検査し、データ・ソースに残す値を設定するメソッドを提供します。 すべての競合が解決されると、アプリケーションは再度acceptChanges
メソッドを呼び出して、解決された値をデータ・ソースへ書き込む必要があります。 データ・ソース内のすべての値がすでに持続値である場合、acceptChanges
メソッドは何も行いません。一部のプロバイダ実装は、競合を防ぐためにロックを使用します。 この場合、
acceptChanges
メソッドを呼び出したとき、ライターによるデータ・ソースへの変更の書込みは必ず成功します。 このメソッドは、updateRow
メソッド、insertRow
メソッド、またはdeleteRow
メソッドの呼出し後ただちに呼び出せますが、すべての変更が完了して、1つだけ接続を確立すればよい状態で呼び出したほうが効率的です。ノート:
acceptChanges()
メソッドは、COMMIT_ON_ACCEPT_CHANGES
がtrueに設定されているかどうかを判断します。 trueに設定されている場合、同期内のすべての更新がデータ・ソースにコミットされます。 それ以外の場合は、アプリケーションがcommit
またはrollback
メソッドを適切に呼び出す必要があります。- パラメータ:
con
- 標準JDBCConnection
オブジェクト- 例外:
SyncProviderException
- 配下の同期プロバイダのライターが、データ・ソースへの更新の書込みに失敗した場合- 関連項目:
-
restoreOriginal
void restoreOriginal() throws SQLExceptionこのCachedRowSet
オブジェクトを元の値(前回の変更セットの前の値)に戻します。 行セットが変更されていない場合や、変更セットが1つしかない場合は、このCachedRowSet
オブジェクトに読み込まれた値が元の値になります。このメソッドが呼び出された場合、
CachedRowSet
実装は、現在の行セット・インスタンスへのすべての更新、挿入、および削除を以前の値で置き換える必要があります。 さらに、カーソルを最初の行に戻し、rowSetChanged
イベントをトリガーして、登録済みのすべてのリスナーに通知を送る必要があります。- 例外:
SQLException
- このCachedRowSet
オブジェクトの現在の値を以前の値に戻している間にエラーが発生した場合- 関連項目:
-
release
void release() throws SQLExceptionこのCachedRowSet
オブジェクトの現在のコンテンツを解放し、登録済みのすべてのリスナーにrowSetChanged
イベントを送信します。 このメソッドを呼び出すと、まだ適用されていない更新はすべて破棄され、行セットの行がすべて削除されます。 配下のデータ・ソースとの対話は行われないので、行セットのコンテンツ、メタデータ、コンテンツの更新を復元することはできません。この
CachedRowSet
オブジェクトは、コンテンツとその更新が完全にクリアされるまでロックされます。したがって、このRowSet
オブジェクトへの参照を格納するその他のコンポーネントによるダーティ読取りは発生しません。 さらに、このCachedRowSet
オブジェクトを読み取るすべてのコンポーネントが読み込みを完了するまで、コンテンツを解放することはできません。 このCachedRowSet
オブジェクトの動作は、rowSetChanged
イベントがトリガーされたあと、正常な状態に戻ります。JDBCプロパティとSynchronization SPIプロパティを含むメタデータは、将来使用するために保持されます。
command
プロパティなどのプロパティは、このCachedRowSet
オブジェクトの生成元のデータ・ソースに関連付ける必要があります。close
メソッドは、すべての行セットを復元可能とし、ガベージ・コレクタに行セットのJava VMリソースを許可しますが、このメソッドは、行セットを空にします。- 例外:
SQLException
- このCachedRowSet
オブジェクトのコンテンツのフラッシュ時にエラーが発生した場合- 関連項目:
-
undoDelete
void undoDelete() throws SQLException現在の行の削除を取り消して、リスナーに行が変更されたことを通知します。 このメソッドを呼び出したあと、現在の行は削除の対象から除外されます。 このメソッドは、行セットの寿命の間いつでも呼び出すことができます。さらに、複数の行の削除を取り消すこともできます。この場合は、次のようなカーソル位置制御メソッドを使って、カーソルの位置を調整します。
CachedRowSet.absolute
CachedRowSet.first
CachedRowSet.last
- 例外:
SQLException
- (1)現在の行が削除されていない場合、(2)カーソルが挿入行、最初の行の前、または最終行の後ろにある場合- 関連項目:
-
undoInsert
void undoInsert() throws SQLExceptionもし行が挿入された状態であれば、CachedRowSet
オブジェクトから現在の行をただちに削除し、リスナーに行が変更されたことを通知します。 このメソッドは、行セットの寿命の間いつでも呼び出せます。現在の行が例外制限(下記参照)内にある場合、現在の行の挿入を取り消します。さらに、複数の行の挿入を取り消すこともできます。この場合は、次のようなカーソル位置制御メソッドを使って、カーソルの位置を調整します。
CachedRowSet.absolute
CachedRowSet.first
CachedRowSet.last
- 例外:
SQLException
- (1)現在の行が挿入されていない場合、(2)カーソルが最初の行の前、最終行の後ろ、または挿入行にある場合- 関連項目:
-
undoUpdate
void undoUpdate() throws SQLExceptionもし行が変更されていれば、前回の更新操作をただちに元に戻します。 このメソッドは、最終的に行内のすべての更新が前回の同期化(acceptChanges
)または生成の直前の状態に戻るように、すべての列の更新を元に戻します。 このメソッドは、挿入行の更新中にも呼び出すことができます。undoUpdate
は、行セットの寿命の間いつでも呼び出すことができます。ただし、同期化が行われたあと、行セットにさらに変更が加えられるまでは、このメソッドは何も行いません。- 例外:
SQLException
- カーソルがこのCachedRowSet
オブジェクトの最初の行の前または最後の行の後にある場合- 関連項目:
-
columnUpdated
boolean columnUpdated(int idx) throws SQLException このCachedRowSet
オブジェクトの現在の行内の指定された列が更新されたかどうかを示します。- パラメータ:
idx
- 更新のチェックを行う列を示すint
- 戻り値:
- 指定された列が明らかに更新されている場合は
true
、そうでない場合はfalse
- 例外:
SQLException
- カーソルが挿入行、最初の行の前、または最終行の後ろにある場合- 関連項目:
-
columnUpdated
boolean columnUpdated(String columnName) throws SQLException このCachedRowSet
オブジェクトの現在の行内の指定された列が更新されたかどうかを示します。- パラメータ:
columnName
- 更新のチェックを行う列の名前を指定するString
オブジェクト- 戻り値:
- 列が明らかに更新されている場合は
true
、そうでない場合はfalse
- 例外:
SQLException
- カーソルが挿入行、最初の行の前、または最終行の後ろにある場合- 関連項目:
-
toCollection
Collection<?> toCollection() throws SQLExceptionこのCachedRowSet
オブジェクトを、このCachedRowSet
オブジェクトのすべてのデータを格納するCollection
オブジェクトに変換します。Collection
フレームワークの抽象性により、実装は、このCollection
オブジェクトをある程度自由に表現することができます。 各行は汎用的なCollection
実装か、またはTreeMap
オブジェクトやVector
オブジェクトなどの特殊なCollection
実装のどちらかで完全に表現する必要があります。 SQLNULL
列値はJavaプログラミング言語でnull
として表現する必要があります。CachedRowSet
インタフェースの標準的なリファレンス実装では、行セットにTreeMap
オブジェクトを使用し、各行の値をVector
オブジェクトに格納します。 大半の実装で同様に処理することが想定されます。TreeMap
型のコレクションによって、キーのクラスの本来の順序に従って、マップが昇順でソートされます。 各キーは、RowSet
オブジェクトの1行に対応するVector
オブジェクトを参照します。 したがって、各Vector
オブジェクトのサイズは、RowSet
オブジェクト内の列数に正確に一致する必要があります。TreeMap
コレクションで使用するキーは、実装ごとに決定します。実装では、RowSet
オブジェクト自体、または配下のSQLデータにすでに設定されているキーにより、内部のRowSet
表構造内の使用可能なセット・キーを利用できます。- 戻り値:
- この
CachedRowSet
オブジェクトの各行の値を格納するCollection
オブジェクト - 例外:
SQLException
- コレクションの生成時にエラーが発生した場合- 関連項目:
-
toCollection
Collection<?> toCollection(int column) throws SQLException このCachedRowSet
オブジェクト内の指定された列をCollection
オブジェクトに変換します。Collection
フレームワークの抽象性により、実装は、このCollection
オブジェクトをある程度自由に表現することができます。 各列値は汎用的なCollection
実装か、またはVector
オブジェクトなどの特殊なCollection
実装のどちらかで完全に表現する必要があります。 SQLNULL
列値はJavaプログラミング言語でnull
として表現する必要があります。標準的なリファレンス実装では、
Vector
オブジェクトを使用して、列値を格納しますが、大半の実装で同様に処理することが想定されます。Vector
オブジェクトを使用する場合は、サイズをこのCachedRowSet
オブジェクトの行数と正確に一致させる必要があります。- パラメータ:
column
- 値をCollection
オブジェクトで表現する列を示すint
- 戻り値:
- この
CachedRowSet
オブジェクトの指定された列に格納された値を含むCollection
オブジェクト - 例外:
SQLException
- コレクションの生成時にエラーが発生した場合、または無効な列IDが提供された場合- 関連項目:
-
toCollection
Collection<?> toCollection(String column) throws SQLException このCachedRowSet
オブジェクト内の指定された列をCollection
オブジェクトに変換します。Collection
フレームワークの抽象性により、実装は、このCollection
オブジェクトをある程度自由に表現することができます。 各列値は汎用的なCollection
実装か、またはVector
オブジェクトなどの特殊なCollection
実装のどちらかで完全に表現する必要があります。 SQLNULL
列値はJavaプログラミング言語でnull
として表現する必要があります。標準的なリファレンス実装では、
Vector
オブジェクトを使用して、列値を格納しますが、大半の実装で同様に処理することが想定されます。Vector
オブジェクトを使用する場合は、サイズをこのCachedRowSet
オブジェクトの行数と正確に一致させる必要があります。- パラメータ:
column
- コレクションで表現される値を持つ列の名前を指定するString
オブジェクト- 戻り値:
- この
CachedRowSet
オブジェクトの指定された列に格納された値を含むCollection
オブジェクト - 例外:
SQLException
- コレクションの生成時にエラーが発生した場合、または無効な列IDが提供された場合- 関連項目:
-
getSyncProvider
SyncProvider getSyncProvider() throws SQLExceptionこのCachedRowSet
オブジェクトのSyncProvider
実装を取得します。 行セットは、このメソッドを内部で使用して、行セットとデータ・ソース間の読み取りまたは書込み操作をトリガーします。 たとえば、行セットにSyncProvider
から行セット・リーダー(RowSetReader
オブジェクト)のハンドルを取得して、行セットを入力できるようにする必要があります。RowSetReader rowsetReader = null; SyncProvider provider = SyncFactory.getInstance("javax.sql.rowset.provider.RIOptimisticProvider"); if (provider instanceof RIOptimisticProvider) { rowsetReader = provider.getRowSetReader(); }
rowsetReaderが行セット実装内のprivateなアクセス可能フィールドであるとすると、アプリケーションがexecute
メソッドを呼び出すと、このメソッドはリーダーのreadData
メソッドを呼び出して、RowSet
オブジェクトにデータを格納します。rowsetReader.readData((RowSetInternal)this);
さらに、アプリケーションはこのメソッドから返される
SyncProvider
オブジェクトを使用して、ベンダー、バージョン、プロバイダID、同期のグレード、現在設定されているロックなどのSyncProvider
オブジェクトに関する情報を返すメソッドを呼び出すことができます。- 戻り値:
- 行セットのインスタンス化時に設定された
SyncProvider
オブジェクト、または設定されていない場合はデフォルト・プロバイダ - 例外:
SQLException
-SyncProvider
オブジェクトを返すときにエラーが発生した場合- 関連項目:
-
setSyncProvider
void setSyncProvider(String provider) throws SQLException このCachedRowSet
オブジェクトのSyncProvider
オブジェクトを、指定されたオブジェクトに設定します。 このメソッドで、SyncProvider
オブジェクトをリセットできます。CachedRowSet
実装は常に利用可能なSyncProvider
メカニズムでインスタンス化する必要がありますが、SyncProvider
オブジェクトのリセットが望ましい、または必要とされる場合もあります。 たとえば、アプリケーションで、しばらくはデフォルトのSyncProvider
オブジェクトを使用しておき、あとで最近利用できるようになった、より必要にかなうプロバイダを選択して使用することができます。SyncProvider
オブジェクトをリセットすると、RowSet
オブジェクトはSyncFactory
から新しいSyncProvider
実装を要求します。 これにより、以前のすべての接続と元のデータ・ソースとの関係をリセットし、未接続の行セットの同期動作を大幅に変更することができます。- パラメータ:
provider
-SyncProvider
実装の完全修飾クラス名を指定するString
オブジェクト- 例外:
SQLException
-SyncProvider
実装のリセット中にエラーが発生した場合- 関連項目:
-
size
int size()このCachedRowSet
オブジェクト内の行数を返します。- 戻り値:
- 行セット内の行数
-
setMetaData
void setMetaData(RowSetMetaData md) throws SQLException 指定されたRowSetMetaData
オブジェクトを使って、CachedRowSet
オブジェクトのメタデータを設定します。RowSetReader
オブジェクトは、行セットのコンテンツを読み取る際に、RowSetMetaData
オブジェクトを生成し、RowSetMetaData
実装内のメソッドを使ってこれを初期化します。 リファレンス実装ではRowSetMetaDataImpl
クラスを使用します。 リーダーが行セットのコンテンツの読取りを完了すると、このメソッドが内部で呼び出され、RowSetMetaData
オブジェクトが行セットに渡されます。- パラメータ:
md
- このCachedRowSet
オブジェクト内の列に関するメタデータを含むRowSetMetaData
- 例外:
SQLException
- 行セットに無効なメタデータが提供された場合
-
getOriginal
ResultSet getOriginal() throws SQLExceptionこのCachedRowSet
オブジェクトの元の値を格納するResultSet
オブジェクトを返します。ResultSet
オブジェクトのカーソルは、先頭行の前に置く必要があります。 さらに、返されるResultSet
オブジェクトは次のプロパティを持つ必要があります。- ResultSet.TYPE_SCROLL_INSENSITIVE
- ResultSet.CONCUR_UPDATABLE
RowSet
オブジェクトの元の値は、配下のデータ・ソースと最後の同期の前に格納されていた値です。 同期がなかった場合、元の値は、RowSet
オブジェクトに格納された値になります。 このメソッドは、アプリケーションがacceptChanges
メソッドを呼び出し、SyncProvider
オブジェクトが競合を確認するように実装されている場合に、内部で呼び出されます。 この場合、ライターは元の値とデータ・ソース内の現在の値を比較し、競合を確認します。- 戻り値:
- この
CachedRowSet
オブジェクトの元の値を格納するResultSet
オブジェクト - 例外:
SQLException
-ResultSet
オブジェクトの生成時にエラーが発生した場合
-
getOriginalRow
ResultSet getOriginalRow() throws SQLExceptionこのCachedRowSet
オブジェクトの現在行の元の値のみを格納するResultSet
オブジェクトを返します。ResultSet
オブジェクトのカーソルは、先頭行の前に置く必要があります。 さらに、返されるResultSet
オブジェクトは次のプロパティを持つ必要があります。- ResultSet.TYPE_SCROLL_INSENSITIVE
- ResultSet.CONCUR_UPDATABLE
- 戻り値:
- 行の元の結果セット
- 例外:
SQLException
- 現在行が存在しない場合- 関連項目:
-
setOriginalRow
void setOriginalRow() throws SQLExceptionこのCachedRowSet
オブジェクトの現在の行を元の行として設定します。このメソッドは、現在の行の変更された値がデータ・ソースと同期されたあとに、内部で呼び出されます。 現在の行は、挿入、削除、または更新としてタグ付けしてあってはいけません。
setOriginalRow
の呼出しは取り消せません。- 例外:
SQLException
- 現在行が存在しない場合、または元の行のコンテンツのリセット時にエラーが発生した場合- 関連項目:
-
getTableName
String getTableName() throws SQLExceptionこのCachedRowSet
オブジェクトの作成に使用されたオブジェクト(テーブル)の識別子を返します。 この名前は、繰返し設定できます。名前の設定回数や、標準実装が以前のテーブル名を追跡する必要があるかどうかについては、仕様による制限はありません。- 戻り値:
- この
CachedRowSet
オブジェクトのデータのソースであるテーブル名を指定するString
オブジェクト。または、テーブルの名前を設定していない場合はnull
- 例外:
SQLException
- テーブル名を返すときにエラーが発生した場合- 関連項目:
-
setTableName
void setTableName(String tabName) throws SQLException このCachedRowSet
オブジェクトの派生元のテーブルの識別子を、指定のテーブル名に設定します。 ライターは、同期時に、この名前を使用して、データ・ソースの値とCachedRowSet
オブジェクトの値を比較する際に使用するテーブルを判断します。 テーブルの識別子は、このCachedRowSet
オブジェクトから変更された値を書き込む場所も示します。この
CachedRowSet
オブジェクトの実装では、内部的にRowSetMetaDataImpl
オブジェクトに名前を取得させることができます。- パラメータ:
tabName
- このCachedRowSet
オブジェクトが派生したテーブルを識別するString
オブジェクト。null
は不可、空の文字列は可能- 例外:
SQLException
- テーブルの名前付けでエラーが発生した場合、またはtabNameがnull
の場合- 関連項目:
-
getKeyColumns
int[] getKeyColumns() throws SQLExceptionこのCachedRowSet
オブジェクトの行を一意に識別するキーを構成する列を示す1つ以上の列番号を格納する配列を返します。- 戻り値:
- この
CachedRowSet
オブジェクトの行の主キーを構成する列を示す列番号を格納する配列。 主キーを表現する列がない場合、この配列は空になる。 - 例外:
SQLException
- このCachedRowSet
オブジェクトが空の場合- 関連項目:
-
setKeyColumns
void setKeyColumns(int[] keys) throws SQLException このCachedRowSet
オブジェクトのkeyCols
フィールドに、指定された列番号の配列(このCachedRowSet
オブジェクト内の行を一意に識別するキーを構成する)を設定します。CachedRowSet
オブジェクトがJoinRowSet
オブジェクトに含まれる場合、キー列として指定された列が一致列になれば、このメソッドで定義されたキーと生成された制約は保持されます。- パラメータ:
keys
- このCachedRowSet
オブジェクトの主キーを構成する列を示すint
配列。配列内の各要素は、0
より大きく、この行セット内の列数以下である必要がある- 例外:
SQLException
- 指定された配列内の番号がこの行セットで有効でない場合- 関連項目:
-
createCopy
CachedRowSet createCopy() throws SQLExceptionこのCachedRowSet
オブジェクトのデータのディープ・コピーであるRowSet
オブジェクトを作成します。createShared
呼出しによって生成されたRowSet
オブジェクトの場合とは異なり、元のRowSet
オブジェクトのコピーの更新が、元のRowSet
オブジェクトに可視であってはいけません。 また、元のRowSet
に登録されたイベント・リスナーのスコープに、新しいRowSet
コピーが含まれていてはなりません。 また、確立済みの制約制限は保持されなければいけません。- 戻り値:
- 新しい
RowSet
オブジェクト。CachedRowSet
オブジェクトのディープ・コピーであり、このCachedRowSet
オブジェクトからは完全に独立している - 例外:
SQLException
-CachedRowSet
オブジェクトのコピーの生成時にエラーが発生した場合- 関連項目:
-
createCopySchema
CachedRowSet createCopySchema() throws SQLExceptionこのCachedRowSet
オブジェクトの空のコピーであるCachedRowSet
オブジェクトを作成します。 コピーには、何も含めず、元のCachedRowSet
オブジェクトの表構造だけを表現する必要があります。 さらに、元のCachedRowSet
オブジェクトに設定された主キーまたは外部キーの制約を、新しい空のCachedRowSet
オブジェクトにも等しく適用する必要があります。createShared
メソッド呼出しによって生成されたRowSet
オブジェクトとは異なり、createCopySchema
メソッドによるこのCachedRowSet
オブジェクトのコピーへの更新は可視にしてはいけません。アプリケーションは、このメソッドによって返された
CachedRowSet
オブジェクトからWebRowSet
オブジェクトを形成し、あとで使用するために、RowSet
スキーマ定義をXMLにエクスポートできます。- 戻り値:
- この
CachedRowSet
オブジェクトの空のコピー - 例外:
SQLException
- このCachedRowSet
オブジェクトの構造のクローニング時にエラーが発生した場合- 関連項目:
-
createCopyNoConstraints
CachedRowSet createCopyNoConstraints() throws SQLExceptionこのCachedRowSet
オブジェクトのデータのディープ・コピーであるが、独立しているCachedRowSet
オブジェクトを作成します。createShared
メソッド呼出しによって生成されたRowSet
オブジェクトの場合とは異なり、このCachedRowSet
オブジェクトのコピーに対して行われた変更は可視であってはいけません。 さらに、このCachedRowSet
オブジェクトによって登録されたすべてのイベント・リスナーのスコープに新しいRowSet
オブジェクトが含まれていてはいけません。 また、このCachedRowSet
オブジェクトに対して確立された制約制限はコピーに維持されていてはいけません。- 戻り値:
- 新しい
CachedRowSet
オブジェクト。CachedRowSet
オブジェクトのディープ・コピーであり、このCachedRowSet
オブジェクトからは完全に独立している - 例外:
SQLException
-CachedRowSet
オブジェクトのコピーの生成時にエラーが発生した場合- 関連項目:
-
getRowSetWarnings
RowSetWarning getRowSetWarnings() throws SQLExceptionこのRowSet
オブジェクトに関する呼出しによって報告される最初の警告を取得します。 後続のRowSet
オブジェクトの警告は、このメソッドが返すRowSetWarning
オブジェクトにチェーンされます。 警告チェーンは、新しい行が読み込まれるたびに自動的にクリアされます。 クローズ済のRowSetオブジェクトでこのメソッドを呼び出すことはできません。そうした場合にはSQLException
がスローされます。- 戻り値:
- 最初の
RowSetWarning
オブジェクトが報告したRowSetWarning。ない場合はnull - 例外:
SQLException
- このメソッドが、閉じられたRowSet上で呼び出された場合- 関連項目:
-
getShowDeleted
boolean getShowDeleted() throws SQLException削除マークが付けられた行を現在の行とともに表示するかどうかを示すboolean
を取得します。true
が返された場合、削除行は現在の行とともに表示されます。false
が返された場合、削除行は現在の行のセット内に表示されません。 デフォルト値はfalse
です。標準行セット実装は、セキュリティ上の配慮または特定の配備シナリオに適合させるため、この動作を制限することができます。 これは、定義済みの実装として残され、標準の動作を表しません。
ノート: 削除された行を表示すると、一部の標準JDBC
RowSet
実装メソッドの動作が複雑になります。 しかし、削除された行を表示する機能は、非常に専門的なアプリケーションでしか使用されません。したがって、ほとんどの行セット・ユーザーは、この余分な詳細を無視してかまいません。- 戻り値:
- 削除された行を表示する場合は
true
、そうでない場合はfalse
- 例外:
SQLException
- 行セット実装が、削除行が表示されるかどうかを判断できない場合- 関連項目:
-
setShowDeleted
void setShowDeleted(boolean b) throws SQLException showDeleted
プロパティとして、削除マーク付きの行を現在の行とともに表示するかどうかを指定するboolean
を設定します。 値がtrue
の場合、削除された行が現在の行セットとともに表示されます。 値がfalse
の場合、削除された行は現在の行セット内に表示されません。標準行セット実装は、セキュリティ上の配慮または特定の配備シナリオに適合させるため、この動作を制限することができます。 これは、定義済みの実装として残され、標準の動作を表しません。
- パラメータ:
b
- 削除された行を表示する場合はtrue
、そうでない場合はfalse
- 例外:
SQLException
- 行セット実装が、削除行の表示または非表示の設定をリセットできない場合- 関連項目:
-
commit
void commit() throws SQLExceptionCachedRowSet
オブジェクトのSyncProvider
には、ResultSet
のConnection
オブジェクトか、コンストラクタに渡されるJDBCプロパティが含まれます。 このメソッドは、Connection
コミット・メソッドをラップして、柔軟な自動コミットまたは非自動コミットのトランザクション制御サポートを提供します。前回のコミット/ロールバックのあと、
acceptChanges()
メソッドによって行われたすべての変更を永続的なものにします。 このメソッドは自動コミット・モードが無効になっているときしか使用できません。- 例外:
SQLException
- データベース・アクセス・エラーが発生した場合、またはこのCachedRowSet
内のConnectionオブジェクトが自動コミット・モードである場合- 関連項目:
-
rollback
void rollback() throws SQLExceptionCachedRowSet
オブジェクトのSyncProvider
には、元のResultSet
のConnection
オブジェクトか、それに渡されるJDBCプロパティが含まれます。現在のトランザクションでのすべての変更を取り消します。 このメソッドは自動コミット・モードが無効になっているときしか使用できません。
- 例外:
SQLException
- データベース・アクセス・エラーが発生した場合、またはこのCachedRowSet
内のConnectionオブジェクトが自動コミット・モードである場合。
-
rollback
void rollback(Savepoint s) throws SQLException CachedRowSet
オブジェクトのSyncProvider
には、元のResultSet
のConnection
オブジェクトか、それに渡されるJDBCプロパティが含まれます。現在のトランザクションでのすべての変更を取り消して、最後の
Savepoint
トランザクション・マーカーに戻します。 このメソッドは自動コミット・モードが無効になっているときしか使用できません。- パラメータ:
s
-Savepoint
トランザクション・マーカー- 例外:
SQLException
- データベース・アクセス・エラーが発生した場合、またはこのCachedRowSet
内のConnectionオブジェクトが自動コミット・モードである場合。
-
rowSetPopulated
void rowSetPopulated(RowSetEvent event, int numRows) throws SQLException 登録済みリスナーに、指定されたRowSetEventオブジェクト内のRowSetオブジェクトが多数の追加行を読み込んだことを通知します。numRows
パラメータにより、このイベントは、numRow
ごとにトリガーされます。イベントのソースはevent.getSourceメソッドで取得できます。
- パラメータ:
event
- イベントのソースであるRowSet
オブジェクトを格納するRowSetEvent
オブジェクトnumRows
- 読込み時の行の間隔数。ここで、読み込まれたCachedRowSet
がトリガーされる。デフォルト値はゼロ。fetchSize
より小さい値とゼロより小さい値は指定できない- 例外:
SQLException
-numRows < 0 または numRows < getFetchSize()
-
populate
void populate(ResultSet rs, int startRow) throws SQLException このCachedRowSet
オブジェクトに、指定されたResultSet
オブジェクトのデータを読み込みます。populate(ResultSet)
メソッドに関連付けられている場合、追加パラメータにより、CachedRowSetインスタンスの読込みを開始するResultSet
内の開始位置を指定することができます。このメソッドは、アプリケーションがオープンしている
ResultSet
オブジェクトに接続しているときexecute
メソッドの代替として使用できます。 新しい接続を開いてこのCachedRowSet
オブジェクトのコマンドを再実行する必要がない点で、populate
メソッドは、パラメータを取らないexecute
メソッドよりも効率的です。 また、populate
メソッドを使用することは、ResultSet
オブジェクトを取るexecute
メソッドよりも便利です。- パラメータ:
startRow
- このCachedRowSet
へのレコードの読込みを開始する、ResultSet
内の位置rs
- このCachedRowSet
オブジェクトに読み込むデータを含むResultSet
オブジェクト- 例外:
SQLException
- nullのResultSet
オブジェクトが提供された場合、またはこのCachedRowSet
オブジェクトが関連するResultSetMetaData
オブジェクトを取得できない場合- 関連項目:
-
setPageSize
void setPageSize(int size) throws SQLException CachedRowSet
オブジェクトのページ・サイズを設定します。CachedRowSet
は、自身をページ・サイズで設定された行数の行に読み込む構成にできます。populate()
またはexecute()
が呼び出されると、CachedRowSet
は、RowSetの読込み使用した元のSQLクエリーに従って、追加ページをフェッチします。- パラメータ:
size
-CachedRowSet
のページ・サイズ- 例外:
SQLException
-CachedRowSet
ページ・サイズの設定時にエラーが発生した場合、またはページ・サイズがゼロより小さい場合。
-
getPageSize
int getPageSize()CachedRowSet
オブジェクトのページ・サイズを返します。- 戻り値:
- ページ・サイズを表す
int
-
nextPage
boolean nextPage() throws SQLExceptionCachedRowSet
の現在のページを増分します。 これにより、CachedRowSet
実装は、次のページ・サイズ分の行をフェッチし、RowSetに読み込みます。ただし、このためには、その他の行がRowSetの読込みに使用された元のSQLクエリーのスコープ内に残っていなければいけません。- 戻り値:
- まだページがある場合はtrue、これが最後のページである場合はfalse
- 例外:
SQLException
- 次のページのフェッチ時にエラーが発生した場合、またはこのメソッドがpopulateやexecuteの実行前に早く呼び出されすぎた場合。
-
previousPage
boolean previousPage() throws SQLExceptionCachedRowSet
の現在のページを減分します。 これにより、CachedRowSet
実装は、以前のページ・サイズ分の行をフェッチし、RowSetに読み込みます。 以前のページ内の返された行の量は、RowSetの読込みに使用された元のSQLクエリーのスコープ内に残っている必要があります。- 戻り値:
- 前のページが正常に取得された場合はtrue、これが最初のページである場合はfalse。
- 例外:
SQLException
- 以前のページのフェッチ時にエラーが発生した場合、またはこのメソッドがpopulateやexecuteの実行前に早く呼び出されすぎた場合。
-