モジュール java.sql.rowset
パッケージjavax.sql.rowset.serial
パッケージjavax.sql.rowset.serial
Javaプログラミング言語でのSQL型とデータ型の直列化可能マッピングを可能にするユーティリティ・クラスを提供します。
しかし、Javaオブジェクトが現在直列化可能でなく、直列化処理を実行できない場合、このクラスは、オブジェクト・インスタンスを直列化可能な状態にするため、staticメンバー以外のすべてのメンバーを直列化しようとします。 静的または一時フィールドは直列化できず、直列化を試行すると、
さらに、
アプリケーションが
標準JDBC RowSet
実装は、これらのユーティリティ・クラスを、未接続のRowSet
オブジェクトを直列化するための補助として利用できます。 これは、切断されたRowSet
オブジェクトをワイヤー上で別のVMに、またはアプリケーション内のレイヤー間で送信する場合に便利です。
1.0 SerialArray
Javaプログラミング言語でのSQL ARRAY値の直列化可能マッピングです。SerialArray
クラスは、配列オブジェクトから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
オブジェクトからインスタンスを作成するためのコンストラクタを提供します。 SerialClob
オブジェクトが構築される前に、Clob
オブジェクトによって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メンバー以外のすべてのメンバーを直列化しようとします。 静的または一時フィールドは直列化できず、直列化を試行すると、
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
オブジェクト内の値の読取りを可能にする機能があります。 メソッドwasNull
は、最後に読み取られた値がSQL NULLであったかどうかを判断するために使用されます。 Map
オブジェクトを取得するコンストラクタまたはgetterメソッドがコールされると、JDBCドライバはメソッドSQLData.getSQLType
をコールして、カスタム・マップされるUDTのSQLタイプを決定します。 ドライバは、SQLInputImpl
のインスタンスを作成し、UDTの属性を移植します。 ドライバは次に、入力ストリームをメソッドSQLData.readSQL
に渡し、次にSQLInputImpl
メソッドをコールして入力ストリームから属性を読み取ります。10.0 SQLOutputImpl
カスタム・マップされたユーザー定義型(UDT)の属性をデータベースに再度書き込むための出力ストリームです。 ドライバはこのインタフェースを内部で使用します。このインタフェースのメソッドがアプリケーション・プログラマによって直接呼び出されることはありません。アプリケーションが
PreparedStatement.setObject
メソッドを呼び出すと、ドライバはカスタム・マッピングを利用して、書き込まれる値がUDT型であるかどうかを確認します。 その場合、このUDTのSQLData
を実装するクラスのClassオブジェクトを含むエントリがタイプ・マップ内に存在します。 書き込まれる値がSQLData
のインスタンスである場合、ドライバはSQLOutputImpl
のインスタンスを作成し、SQLData.writeSQL
メソッドに渡します。 次に、メソッドwriteSQL
は、適切なSQLOutputImpl
ライター・メソッドをコールして、SQLユーザー定義型の表現として、SQLData
オブジェクトからSQLOutputImpl
出力ストリームにデータを書き込みます。
カスタム・マッピング
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
オブジェクトを作成し、AUTHORS
とAuthors
を関連付けるエントリを指定します。
java.util.Map map = new java.util.HashMap(); map.put("SCHEMA_NAME.AUTHORS", Class.forName("Authors");
Map
オブジェクトmapに、SQL構造型の完全指定名とAuthors
クラスのClass
オブジェクトから成るエントリが追加されます。 このエントリがメソッドに渡されることにより、ドライバは、AUTHORS
とAuthors
のマッピングの関係を把握できます。
未接続のRowSet
オブジェクトの場合、カスタム・マッピングを行うコンストラクタまたはメソッドにMap
オブジェクトが渡された場合にのみ、カスタム・マッピングが行われます。 接続済みRowSet
オブジェクトの場合、データ・ソースとの接続が確保されているので、状況は異なります。 カスタム・マッピングを行うメソッドが未接続のRowSet
オブジェクトによって呼び出されると、このメソッドは、使用されるConnection
オブジェクトに関連付けられたMap
オブジェクトを使用します。 つまり、マップを指定しない場合、デフォルトとして接続の型マップが使用されます。
-
クラス説明
Array
オブジェクトの直列化バージョンであり、Javaプログラミング言語でのSQLARRAY
値のマッピングです。Javaプログラミング言語でのSQLBLOB
値の直列化マッピングです。Javaプログラミング言語でのSQLCLOB
値の直列化マッピングです。Javaプログラミング言語でのSQLDATALINK
値の直列化マッピングです。BLOB, CLOB, STRUCT or ARRAY
などのSQL型やDATALINK and JAVAOBJECT
などのSQL型の、直列化または直列化復元時のエラーを示します。Javaプログラミング言語でのSQLJAVA_OBJECT
値の直列化可能なマッピングです。Ref
オブジェクトの直列化マッピングであり、Javaプログラミング言語でのSQLREF
値のマッピングです。Javaプログラミング言語でのSQL構造型の直列化マッピングです。ユーザー定義型(UDT)のカスタム・マッピング用入力ストリームです。カスタム・マップされたユーザー定義型(UDT)の属性をデータベースに再度書き込むための出力ストリームです。