JavaTM 2 Platform
Standard Ed. 5.0

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

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

参照先:
          説明

クラスの概要
SerialArray Array オブジェクトの直列化バージョンであり、Java プログラミング言語での SQL ARRAY 値のマッピングです。
SerialBlob Java プログラミング言語での SQL BLOB 値の直列化マッピングです。
SerialClob Java プログラミング言語での SQL CLOB 値の直列化マッピングです。
SerialDatalink Java プログラミング言語での SQL DATALINK 値の直列化マッピングです。
SerialJavaObject Java プログラミング言語での SQL JAVA_OBJECT 値の直列化可能マッピングです。
SerialRef Ref オブジェクトの直列化マッピングであり、Java プログラミング言語での SQL REF 値のマッピングです。
SerialStruct Java プログラミング言語での SQL 構造型の直列化マッピングです。
SQLInputImpl ユーザ定義型 (UDT) のカスタムマッピング用入力ストリームです。
SQLOutputImpl カスタムマップされたユーザ定義型 (UDT) の属性をデータベースに再度書き込むための出力ストリームです。
 

例外の概要
SerialException DATALINK、JAVAOBJECTBLOB、CLOB、STRUCT、ARRAY などの 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 オブジェクトを使用します。 つまり、マップを指定しない場合、デフォルトとして接続の型マップが使用されます。


JavaTM 2 Platform
Standard Ed. 5.0

バグの報告と機能のリクエスト
さらに詳しい API リファレンスおよび開発者ドキュメントについては、Java 2 SDK SE 開発者用ドキュメントを参照してください。開発者向けの詳細な解説、概念の概要、用語の定義、バグの回避策、およびコード実例が含まれています。

Copyright 2004 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。