[先頭の項目] [前の項目] [次の項目] [最後の項目]

付録 A - 新しい特徴の要約

注: この章の内容は、Addison Wesley 社より Java シリーズの 1 巻として出版された『JDBCTM API Tutorial and Reference, Second Edition: Universal Data Access for the JavaTM 2 Platform』(ISBN 0-201-43328-1) に基づいて作成したものです。

この付録は、JDBC 2.1 コア API の新しい特徴を要約しています。

A.1 JDBC 2.1 コア API の変更点の概要

JDBC 2.1 コア API は、JDBC 1.0 API を含み、さらに拡張機能および新しい機能を追加しています。これらの追加された機能により、汎用的なデータアクセスと向上したパフォーマンスの提供によって、データベースコンピューティングの最前線に Java プログラミング言語を位置付けます。

「下位互換性の目標」に従っているので、旧バージョンの JDBC API を使用するアプリケーションは、Java 2 プラットフォームを使って問題なく実行できます。しかし、2.0 の新しい特徴を利用するアプリケーションは、それらの特徴を実装しているドライバとともに実行しなければなりません。

JDBC 2.1 コア API の新しい特徴は、新しい機能のサポートと SQL3 データ型のサポートの 2 つに大きく分類されます。

  1. 新しい機能のサポート
  2. 高度なデータ型のサポート

データの検索、保存、操作が便利になり、さらに、新しい特徴により JDBC アプリケーションの効率がより良くなります。たとえば、バッチ更新により性能が大幅に向上します。新しい BlobClobArray インタフェースにより、アプリケーションはクライアント上にデータを実体化する必要なく、大量のデータを操作することができるので、転送時間と必要なメモリ容量の大きな節約につながります。また、フェッチサイズとフェッチ方向の設定のための新しいメソッドにより、プログラマはアプリケーションを微調整して、より効率的なデータ検索と処理を達成できます。

A.2 新しい機能の概要

JDBC 2.1 コア API は、重要な新機能を追加しています。ここでは、それぞれの新しい機能範囲について簡単に説明し、サポートしている API をまとめます。

A.2.1 スクロール可能な結果セット

スクロール可能な結果セットは、現在のカーソル位置からの相対位置または指定の位置に、カーソルを進めたり戻したりできます。次のインタフェースには、スクロール可能な結果セットをサポートする新しいメソッドがあります。

A.2.2 バッチ更新

新しいバッチ更新機能により、更新を個別に送信せずに、データベースに複数の更新を一度に送信してバッチ実行することができます。次のインタフェースには、バッチ更新をサポートするメソッドが追加されています。 BatchUpdateException 例外は新規です。

A.2.3 プログラム的な更新

プログラム的な更新により、SQL 文ではなく JDBC API を使って更新を行うことができます。次のインタフェースには、プログラム的な更新をサポートする新しいメソッドと定数があります。

A.2.4 その他の新しい特徴

JDBC 2.1 コア API には、上記の他に、さまざまな新しい特徴があります。 この特徴を以下にまとめます。

A.3 高度なデータ型のサポート

JDBC 2.1 コア API には高度なデータ型のサポートが追加されており、高度なデータ型を単純なデータ型と同じくらい簡単に使用できます。このサポートには、本質的にはオブジェクトである新しい SQL データ型の保存、検索、更新の機能も含まれるので、オブジェクトデータベースとリレーショナルデータベースの明確な区別をなくすことができます。以下の 4 つの節 (「A.3.1 SQL3 データ型とは何か」「A.3.2 SQL3 データ型のサポートの概要」「A.3.3 新しい SQL3 データ型のマッピング」「A.3.4 SQL ロケータ」) で、JDBC 2.0 コア API の高度なデータ型のサポートについて説明します。

SQL で定義されているオブジェクトをデータベーステーブル内の値として保存できるだけではなく、Java アプリケーションを作成するプログラマは、Java プログラミング言語で定義されているオブジェクトをデータベーステーブル内の値として保存することができます。「A.3.5 Java オブジェクト保存のサポート」 で、この機能について説明します。

ドライバは、そのドライバの DBMS がサポートしていない機能を実装するようには、要求されていません。 そのため、すべてのドライバが、ここで説明している機能を実装する必要はありません。getTypeInfogetColumnsgetUDTs などの DatabaseMetaData メソッドを呼び出して、ドライバがサポートしているデータ型の情報を取得することができます。

A.3.1 SQL3 データ型とは何か

ここでは新しい SQL3 データ型について説明します。Java プログラミング言語のデータ型へのこれらのデータ型のマッピングについては、「A.3.3 新しい SQL3 データ型のマッピング」で説明します。

SQL3 データ型は、次のように分類されます。

A.3.2 SQL3 データ型のサポートの概要

JDBC 2.1 コア API は、次の新しいインタフェース、メソッド、フィールドによって、新しい SQL3 データ型をサポートします。

A.3.3 新しい SQL3 データ型のマッピング

JDBC 2.1 コア API では、SQL3 データ型の正確な複製を試みるのではなく、それらのデータ型を Java プログラミング言語の型にマッピングすることにより、それらのデータ型の機能性を維持し、使用の便宜をはかることを目標とします。たとえば、SQL3 には「ロケータ型」と呼ばれるデータ型があり、データベースサーバに保存されているデータを指すためにクライアント上で使用されます。ロケータではクライアントマシン上にデータを実体化しなくてもデータを操作できるので、大きなデータを扱う場合に役立ちます。SQL3 には、ARRAYBLOBCLOB 型と構造化型のためのロケータが含まれています。JDBC 2.1 コア API には、これらのデータ型のためのロケータが直接含まれてはいません (構造化型のためのロケータはまったくありません) が、ドライバと DBMS が状況に合わせて適切なロケータを使用するように実装されたインタフェースがあります。その結果、JDBC API を使って SQL の ARRAYBLOBCLOB 型の値にアクセスする場合、開発者はロケータについて考える必要はありません。ロケータの詳細については、「A.3.4 SQL ロケータ」 を参照してください。

JDBC 2.1 コア API では、次の SQL3 データ型は Java プログラミング言語のインタフェースにマッピングされます。

個別型は単一の組み込み型を基にしているため、単純にその組み込み型への標準的なマッピングにマッピングされ、インタフェースにはマッピングされません。たとえば、次の SQL 文は新しいデータ型 MONEY を作成します。

CREATE TYPE MONEY AS NUMERIC(10, 2)

この新しい UDT は java.math.BigDecimal にマッピングされるデータ型 NUMERIC を基にしています。そのため、データ型 MONEYjava.math.BigDecimal にマッピングされます。したがって、MONEY 型の値は getBigDecimal メソッドで取得され、setBigDecimal メソッドで保存され、updateBigDecimal メソッドで更新されます。

A.3.4 SQL ロケータ

SQL LOCATOR は、データベースサーバ上のデータへの論理ポインタです。一般に、画像やオーディオなど、クライアント上に生成するには大きすぎるデータを参照します。ロケータはクライアント環境にのみ存在し、その存在は一時的です。JDBC 2.1 コア API の標準的な実装では BlobClobArray の各インタフェースのインスタンス用に内部的にロケータを使用します。つまり、BlobClobArray オブジェクトにはデータそのものが含まれているのではなく、サーバ上のデータを指すロケータが含まれています。BlobClobArray インスタンスを操作するということは、実際には、それらが表すデータベースオブジェクトを操作していることになります。クライアントにデータを持ち込まずに大きなデータベースオブジェクトを操作するこの機能は、性能に大きく貢献します。

JDBC 2.1 コア API では SQL LOCATOR(構造化型) の使用は必要ではありません。標準的な実装では、Struct オブジェクトには、それがマッピングされる構造化型のデータが含まれていて、BlobClobArray オブジェクトのような内部的なロケータとしては実装されていません。

A.3.5 Java オブジェクト保存のサポート

JDBC API では、Java プログラミング言語に定義されている永続的な保存を、getObjectsetObject メソッドを通じて、常にサポートしてきました。もちろん、Java オブジェクトの永続的な保存は、DBMS がそれをサポートしていない限り実際には起り得ません。このためサポートには制限がありますが、Java オブジェクトをデータ型として認識する新世代の DBMS が出現しつつあります。Java リレーショナル DBMS と呼ばれるこれらの DBMS では、Java クラスのインスタンスをデータベーステーブル内の列の値として保存できます。



[先頭の項目] [前の項目] [次の項目] [最後の項目]

Copyright © 1999, Sun Microsystems, Inc. All rights reserved.