Java™ Platform
Standard Edition 7

パッケージ javax.sql.rowset.serial

Java プログラミング言語での SQL 型とデータ型の直列化可能マッピングを可能にするユーティリティークラスを提供します。

参照: 説明

パッケージ javax.sql.rowset.serial の説明

Java プログラミング言語での SQL 型とデータ型の直列化可能マッピングを可能にするユーティリティークラスを提供します。

標準 JDBC RowSet 実装は、これらのユーティリティークラスを、未接続の RowSet オブジェクトを直列化するための補助として利用できます。未接続の RowSet を回線経由で別の VM に転送したり、アプリケーション内のレイヤー間で転送したりする場合に便利です。

1.0 SerialArray

Java プログラミング言語での SQL ARRAY 値の直列化可能マッピングです。

SerialArray クラスは、Array オブジェクトから SerialArray インスタンスを作成するためのコンストラクタと、基底型とその SQL 名を取得するためのメソッドと、SerialArray オブジェクトの一部または全部をコピーするためのメソッドを提供します。

2.0 SerialBlob

Java プログラミング言語での SQL BLOB 値の直列化可能マッピングです。

SerialBlob クラスは、Blob オブジェクトからインスタンスを作成するためのコンストラクタを提供します。Blob オブジェクトは、SerialBlob オブジェクトを構築する前に、クライアントに SQL BLOB 値のデータを渡す必要があります。SQL BLOB 値のデータは、クライアント上で、Blob.getBytes メソッドによってバイト配列として生成されます。または、Blob.getBinaryStream メソッドによって未解釈のバイトストリームとして生成されます。

SerialBlob メソッドは、SerialBlob オブジェクトをバイト配列またはストリームとしてコピーできます。さらに、SerialBlob オブジェクト内で、指定されたバイトパターンや Blob オブジェクトを検索する機能も提供します。

3.0 SerialClob

Java プログラミング言語での SQL CLOB 値の直列化可能マッピングです。

SerialClob クラスは、Clob オブジェクトからインスタンスを作成するためのコンストラクタを提供します。Clob オブジェクトは、SerialClob オブジェクトを構築する前に、クライアントに SQL CLOB 値のデータを渡す必要があります。SQL CLOB 値のデータは、クライアント上で、Unicode 文字のストリームとして生成されます。

SerialClob メソッドは、SerialClob オブジェクトから部分文字列を取得したり、文字パターンの開始位置を検索したりする機能を提供します。

5.0 SerialDatalink

Java プログラミング言語での SQL DATALINK 値の直列化可能マッピングです。DATALINK 値は、生成元のデータソースによって管理される配下のデータソースの外部のファイルを参照します。

RowSet 実装は、RowSet.getURL() メソッドを使って、外部データの操作用の java.net.URL オブジェクトを取得できます。

     java.net.URL url = rowset.getURL(1);

6.0 SerialJavaObject

Java プログラミング言語での SQL JAVA_OBJECT 値の直列化可能マッピングです。Java オブジェクトインスタンスが Serializable インタフェースを実装すると想定して、直列化処理を単純にラップします。

しかし、Java オブジェクトが現在直列化可能でなく、直列化処理を実行できない場合、このクラスは、オブジェクトインスタンスを直列化可能な状態にするため、static メンバー以外のすべてのメンバーを直列化しようとします。static フィールドや一時フィールドは直列化できません。直列化しようとすると、SerialException がスローされます。

7.0 SerialRef

SQL REF 型と Java プログラミング言語間の直列化可能マッピングです。

SerialRef クラスは、Ref 型から SerialRef インスタンスを作成するためのコンストラクタと、Ref オブジェクト型を取得および設定するためのメソッドを提供します。

8.0 SerialStruct

Java プログラミング言語での SQL 構造型の直列化可能マッピングです。まだ直列化可能な状態にない属性は、直列化可能フォームにマップされます。属性そのものが構造型である場合も、その属性のまだ直列化可能な状態にない属性は、直列化可能フォームにマップされます。

さらに、Map オブジェクトがいずれかのコンストラクタまたは getAttributes メソッドに渡される場合、構造型は、Map オブジェクトに指定されたマッピングに従って、カスタムマップされます。
SerialStruct クラスは、Struct オブジェクトからインスタンスを作成するためのコンストラクタと、データベース内の SQL 構造型の SQL 型名を取得するためのメソッドと、その属性値を取得するためのメソッドを提供します。

9.0 SQLInputImpl

ユーザー定義型 (UDT) のカスタムマッピング用入力ストリームです。SQLInputImpl オブジェクトは、UDT の属性に相当する値のストリームを格納する入力ストリームです。このクラスは、カスタムマッピングを持つ SQL 構造型または SQL 個別型で getObject メソッドが呼び出されるとき、背後でドライバによって使用されます。プログラマが直接 SQLInputImpl メソッドを呼び出すことはありません。

SQLInputImpl クラスは、ResultSet 取得メソッドと類似した一連のリーダーメソッドセットを提供します。これらのメソッドには、SQLInputImpl オブジェクト内の値の読み取りを可能にする機能があります。最終値が SQL NULL であったかどうかの確認には、wasNull メソッドが使用されます。

Map オブジェクトを取るコンストラクタまたは取得メソッドが呼び出されると、JDBC ドライバは SQLData.getSQLType メソッドを呼び出して、カスタムマップされる UDT の SQL 型を確定します。ドライバは、SQLInputImpl のインスタンスを作成し、UDT の属性を移植します。続いて、入力ストリームを SQLData.readSQL メソッドに渡します。すると、このメソッドは、SQLInputImpl メソッドを呼び出して、入力ストリームから属性を読み取ります。

10.0 SQLOutputImpl

カスタムマップされたユーザー定義型 (UDT) の属性をデータベースに再度書き込むための出力ストリームです。ドライバはこのインタフェースを内部で使用します。このインタフェースのメソッドがアプリケーションプログラマによって直接呼び出されることはありません。

アプリケーションが PreparedStatement.setObject メソッドを呼び出すと、ドライバはカスタムマッピングを利用して、書き込まれる値が UDT 型であるかどうかを確認します。UDT 型であれば、この UDT の SQLData を実装するクラスの Class オブジェクトを格納する型マップ内にエントリが存在します。書き込まれる値が SQLData のインスタンスである場合、ドライバは SQLOutputImpl のインスタンスを作成し、SQLData.writeSQL メソッドに渡します。すると、writeSQL メソッドによって適切な SQLOutputImpl ライターメソッドが呼び出され、SQLData オブジェクトから SQLOutputImpl 出力ストリームに、SQL ユーザー定義型の表現としてデータが書き込まれます。

カスタムマッピング

JDBC API は、SQL 構造型または DISTINCT 型と Java プログラミング言語とのマッピングメカニズムを提供します。通常、構造型はクラス、その属性はクラス内のフィールドにマップされますが (DISTINCT 型は属性を 1 つだけ持つものと見なされる)、そのほかにもさまざまな可能性があります。基本的に、マッピングの数に制限はありません。

プログラマは、SQLData インタフェースを実装することにより、マッピングを定義します。たとえば、NAME、TITLE、PUBLISHER の各属性を持つ、AUTHORS という SQL 構造型があるとします。この SQL 構造型は、Authors という名前の Java クラスにマップされます。Authors クラスには、AUTHORS の各属性に対応するフィールド、name、title、publisher を持たせることができます。この場合、SQLData の実装は次のようになります。

   public class Authors implements SQLData {
       public String name;
       public String title;
       public String publisher;

       private String sql_type;
       public String getSQLTypeName() {
           return sql_type;
       }

       public void readSQL(SQLInput stream, String type)
                                  throws SQLException  {
           sql_type = type;
           name = stream.readString();
           title = stream.readString();
           publisher = stream.readString();
       }

       public void writeSQL(SQLOutput stream) throws SQLException {
           stream.writeString(name);
           stream.writeString(title);
           stream.writeString(publisher);
       }
   } 
java.util.Map オブジェクトは、SQL 構造型と Authors クラスのマッピングの関連付けに使用されています。次のコードの抜粋では、Map オブジェクトを作成し、AUTHORSAuthors を関連付けるエントリを指定します。
    java.util.Map map = new java.util.HashMap();
    map.put("SCHEMA_NAME.AUTHORS", Class.forName("Authors");
Map オブジェクト map に、SQL 構造型の完全指定名と Authors クラスの Class オブジェクトから成るエントリが追加されます。このエントリがメソッドに渡されることにより、ドライバは、AUTHORSAuthors のマッピングの関係を把握できます。

未接続の RowSet オブジェクトの場合、カスタムマッピングを行うコンストラクタまたはメソッドに Map オブジェクトが渡された場合にのみ、カスタムマッピングが行われます。接続済み RowSet オブジェクトの場合、データソースとの接続が確保されているので、状況は異なります。カスタムマッピングを行うメソッドが未接続の RowSet オブジェクトによって呼び出されると、このメソッドは、使用される Connection オブジェクトに関連付けられた Map オブジェクトを使用します。つまり、マップを指定しない場合、デフォルトとして接続の型マップが使用されます。

Java™ Platform
Standard Edition 7

バグまたは機能を送信
詳細な API リファレンスおよび開発者ドキュメントについては、Java SE のドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright © 1993, 2013, Oracle and/or its affiliates. All rights reserved.