[目次] [前の項目] [次の項目]

はじめに

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

JDBCTM API は、JavaTM プログラミング言語のための一般的なデータアクセスを提供するアプリケーションプログラミングインタフェースです。 データアクセスの基本的な機能を提供する JDBC 1.0 API を含んでいます。 JDBC 2.0 API は、より進歩した技術で基本 API を補います。また、今日のリレーショナルデータベース管理システムによってサポートされている、最新のオブジェクトリレーショナル機能にアクセスする標準的な方法を提供します。 さらに、この新しい API には、スクロールおよび更新が可能な結果セットの機能が追加され、パフォーマンスの向上が加えられています。 また、接続プールおよび分散トランザクションによって、クライアントからサーバにアクセスすることができます。

1.1 JDBC 2.0 API に含まれる API

JDBC 2.0 API には、JavaTM 2 SDK, Standard Edition および JDBC 標準拡張機能 API のすべての API が含まれます。 次の一覧では、JDBC API の説明に使用されるさまざまな用語について定義します。

下位互換性が確保されているため、JDBC 1.0 API を使用して作成されたアプリケーションは、これまでと同様に、Java 2 SDK, Standard Edition および Java 2 SDK, Enterprise Edition 上で実行することができます。JDBC 1.0 API は、完成度が高いため、基本的には変更されていません。 ただし、JDBC 2.0 API に追加された機能を使用しているアプリケーションは、それらの機能がサポートされているドライバを使用して実行する必要があります。

コア API の一部である java.sql パッケージは、Java 2 SDK, Standard Edition のダウンロード時に自動的に取り込まれています。 javax.sql パッケージをドライバのベンダーがドライバに組み込むこともあります。ドライバにパッケージが組み込まれていない場合は、次の URL の JDBC の Web サイトからダウンロードできます。

    http://java.sun.com/products/jdbc

また、javax.sql パッケージは、Java 2 SDK, Enterprise Edition をダウンロードして取得することもできます。Java 2 SDK, Enterprise Edition には、java.sql および javax.sql パッケージが含まれています。Enterprise JavaBeansTM (EJB) のコンポーネントまたはその他のサーバコードを作成していない場合は、使用するディスク容量を制限するために、Java 2 SDK, Enterprise Edition ではなく Java 2 SDK, Standard Edition をダウンロードすることをお勧めします。

1.2 JDBC API とは

JDBC API は、ほとんどすべてのテーブル形式のデータにアクセスできる Java API です。 (なお、JDBC は、略号ではなく商標ですが、「Java Database Connectivity」の略だと思われることがよくあります。) JDBC API は、Java プログラミング言語で記述されたクラスおよびインタフェースのセットで構成されます。JDBC API によって、ツールおよびデータベース開発者のための標準 API が提供されるため、すべて Java で記述された API を使用して、業界で強力なデータベースアプリケーションを作成することができます。

JDBC API は、SQL 文をリレーショナルデータベースシステムに簡単に送信することができ、そしてすべての SQL 構文をサポートしています。 しかし、SQL 以外でも、テーブル形式のデータを含むファイルなど、その他の種類のデータソースと対話できます。

JDBC API の価値は、アプリケーションからほとんどすべてのデータソースにアクセスでき、Java 仮想マシンが稼動しているすべてのプラットフォーム上でアプリケーションを実行できることです。 すなわち、JDBC API を使用すれば、Sybase データベース、Oracle データベース、IBM DB2 データベースなどにアクセスするためのプログラムを個別に作成する必要がありません。 JDBC API を使用してプログラムを 1 つ作成すれば、そのプログラムが SQL またはその他の文を適切なデータソースに送信することができます。 その上、Java プログラミング言語で書かれたアプリケーションを使用すると、異なるプラットフォームで実行する場合にも、異なるアプリケーションを作成する心配はいりません。 Java プラットフォームと JDBC API を組み合わせることにより、プログラマは一度作成すれば、任意の場所で実行することができます。

Java プログラミング言語は、強固で安全、使いやすく理解しやすい上に、ネットワーク上で自動的にダウンロードできる、データベースアプリケーションのための非常に優れた基盤言語です。 必要なのは、Java アプリケーションが異なる多様なデータソースとやり取りするための方法です。 JDBC は、これを行うための機構です。

JDBC 2.0 API によって、Java プラットフォームの機能が拡張されます。 たとえば、JDBC API では、リモートデータソースから取得した情報を使用するアプレットが含まれる Web ページを発行することができます。 また、企業は JDBC API を使用して、社員全員をイントラネット経由で 1 つ以上の内部データベースに接続することができます (Windows、Macintosh、および UNIX マシンが混在している場合でも同様)。 Java 言語を使用するプログラマが増加するにつれて、Java から汎用性のあるデータアクセスを容易に行う必要が増え続けています。

Java プラットフォームと JDBC テクノロジを組み合わせると、情報の配布が容易かつ経済的になるので、MIS マネージャは Java と JDBC テクノロジの組み合わせを好みます。 企業は、自社でインストール済みのデータベースを引き続き使用しながら、異なるデータベース管理システムまたはその他のデータソースに格納されている場合でも、情報に容易にアクセスすることができます。 新規アプリケーションの開発時間も短縮されます。 インストールとバージョン管理は大幅に簡素化されます。 プログラマがアプリケーションの作成や更新を一度だけ行なってサーバに置くだけで、誰もが最新バージョンにアクセスできるようになります。 また、情報サービスを販売する企業にとって、Java と JDBC テクノロジの組み合わせは、外部のカスタマに最新情報を配布する、よりよい方法を提供します。

1.2.1 JDBC API で何ができるか

簡単にまとめると、JDBC テクノロジベースのドライバ (「JDBC ドライバ」) を使用して次の 3 つの操作を行うことができます。

  1. データソースとの接続の確立
  2. データソースへのクエリーおよび更新文の送信
  3. 実行結果の処理

    次に示すコードの一部分は、これらの 3 つのステップの簡単な例です。

Connection con = DriverManager.getConnection(
					"jdbc:myDriver:wombat", "myLogin", "myPassword");
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM Table1");
while (rs.next()) {
	int x = rs.getInt("a");
	String s = rs.getString("b");
	float f = rs.getFloat("c");
}

1.2.2 その他の API

JDBC API は、SQL コマンドを直接呼び出すときに使用します。 その点で非常によく機能しているので、その他のデータベース接続 API よりも使いやすくなっていますが、さらに代替のインタフェースおよびツールを作成するための基礎となるようにも設計されています。 代替のインタフェースは、内部で JDBC API へ変換される、よりわかりやすくより便利な API を使用することによって「ユーザーフレンドリー」になっています。なぜなら、JDBC API は基盤として使われるのに十分完全かつ強力であり、さまざまな代替の API が JDBC API の上にすでに開発されているからです。たとえば次の代替 API があります。

  1. Java 用組み込み SQL。 Oracle、IBM、Sun などで構成されるコンソーシアムによって、この API を提供するための SQLJ 仕様が定義されています。 JDBC では、基本的に、SQL 文を未解釈の文字列として Java メソッドに渡す必要があります。 組み込み SQL プリプロセッサによって、コンパイル時に型チェックが行われるため、プログラマは SQL 文と Java プログラミング言語の文を混合できます。 たとえば、SQL 文の中で Java 変数を使用して、SQL 値の受け渡しを行うことができます。 SQLJ プリプロセッサは、Java と SQL の混ざったプログラムを効率良く JDBC 呼び出しとともに Java プログラミング言語に変換します。
  2. リレーショナルデータベーステーブルの Java クラスへの直接マッピング。 Java ソフトウェアは、この機能を提供するために Java BlendTM 製品を発表しています。また、その他のベンダーも、同様の製品を提供しています。 この「オブジェクト/リレーショナル」マッピングでは、1 つのテーブルが 1 つのクラスとなり、テーブルの各行がそのクラスのインスタンスとなり、各列の値がそのインスタンスの属性に対応します。 したがって、プログラマは、Java オブジェクトを直接操作することができます。 データをフェッチしたりストアしたりするのに必要な SQL 呼び出しは、「水面下で」に自動的に生成されます。 また、Java Blend によって、より精巧なマッピング、たとえば複数のテーブルの行が 1 つの Java クラスに組み合わされるというようなマッピングも提供されています。

JDBC テクノロジへの関心が高まるにつれて、プログラムの作成を容易にするために、その他の JDBC ベースのツールも開発されてきました。 たとえば、あるアプリケーションは、選択できるデータベースタスクのメニューを表示します。 タスクが選択されるとアプリケーションは、プロンプト、および選択したタスクを実行するために必要な情報を入力する空白を表示します。 要求された情報を入力すると、アプリケーションは自動的に必要な JDBC コマンドを起動します。 ユーザは、SQL 構文をほとんどまたはまったく知らなくても、このようなアプリケーションの助けによってデータベースタスクを実行することができます。

1.2.3 JDBC API と、ODBC および UDA との対比

JDBC API が開発されるまでは、Microsoft の ODBC (Open DataBase Connectivity) API が、リレーショナルデータベースにアクセスするためにもっとも広く使用されていたプログラミングインタフェースでした。 これは、ほとんどすべてのプラットフォームのほとんどすべてのデータベースに接続する能力を備えています。 では、Java から直接 ODBC を使用しないのはなぜでしょうか。

それは、ODBC を Java から使用することは可能ですが、JDBC-ODBC ブリッジの形式で JDBC API を使用して行うのが最良の方法であるからです。 そこで、次に出てくる質問は、「なぜ JDBC API が必要なのか」ということです。

この質問に対しては、次のようにいくつかの答えがあります。

  1. ODBC は C インタフェースを使用しているので、Java プログラミング言語から直接使用するには適切ではありません。 Java からネイティブ C コードへの呼び出しは、アプリケーションのセキュリティ、実装、堅牢さ、および自動移植性の上で多くの欠点があります。
  2. ODBC C API を Java API にリテラルに変換することは好ましくありません。 たとえば、Java ではポインタ (アドレス変数) は使用されませんが、ODBC ではエラーが発生しやすいことで悪名高い汎用ポインタ void * を含めポインタが頻繁に使用されます。 JDBC は、Java プログラミング言語を使用するプログラマにとって自然であるハイレベルなオブジェクト指向インタフェースに翻訳された ODBC として考えることができます。
  3. ODBC は学習が困難です。 これには簡単な機能と高度な機能が混在し、また簡単なクエリーにも複雑なオプションがあります。 一方、JDBC API は、簡単なことは簡単なままに保ちながら、必要な場合には高度な機能が使用できるように設計されています。 また、JDBC API は、Java API なので、プログラマはメモリ管理およびデータバイトの配列を考慮する必要がありません。
  4. JDBC のような Java API は、「Pure Java」ソリューションを可能にするために Java API だけを用いたソリューションが必要になります。 ODBC を使用する場合、ODBC ドライバマネージャとドライバを、あらゆるクライアントマシンに手動でインストールする必要があります。 しかし、JDBC ドライバのが全部 Java で書かれている場合、JDBC コードは、ネットワークコンピュータからメインフレームに至るすべての Java プラットフォーム上で、自動的にインストール可能であり、移植可能であり、そして安全です。

要約すると、JDBC API は SQL を使用して動作させるための自然な Java インタフェースです。 これは、ゼロから作成されているのではなく ODBC 上に作成されているので、ODBC に慣れているプログラマは、JDBC API を非常に学習しやすいと感じることでしょう。 JDBC API は ODBC の基本設計の特徴の一部を残しており、実際、どちらのインタフェースも Open Group (以前の X/Open) SQL CLI (Call Level Interface) を基礎としています。 大きな違いは、JDBC API が Java のスタイルと長所に基づいて構築され、そして、それらが強化されていることです。これは、単に SQL 分をリレーショナルデータベース管理システムへ送るだけにとどまっていません。

Microsoft は、OLE (Object Linking and Embedding) DB、ADO (ActiveX Data Objects)、RDS (Remote Data Service) などの ODBC よりも優れた新しい API を導入しています。 これらの API は、JDBC API と多くの点で共通点があります。 たとえば、OLE DB および ADO も、データベース用のオブジェクト指向のインタフェースで、SQL 文を実行できます。 ただし、OLE DB は、ツールのために設計された低レベルのインタフェースで、開発者向けではありません。 ADO は、より新しいインタフェースで、JDBC API との共通点も多く存在しますが、Pure Java ではありません。 RDS は、JDBC API の RowSet 機能に類似した機能を提供していますが、Java プログラミング言語で記述されておらず、移植性はありません。

最近、Microsoft は、OLE DB、ADO、RDS、および ODBC を包含する用語として、UDA (Universal Data Access) を導入しました。 JDBC 2.0 API には、UDA の重要な機能がすべて含まれており、SQL3 サポートなどの UDA にはない機能が含まれています。

1.2.4 2 層モデルと 3 層モデル

JDBC API は、データベースアクセスの 2 層モデルと 3 層モデルの両方をサポートします。

図 1.1 は、2 層アーキテクチャのデータアクセスを示します。

2 層モデルでは、Java のアプレットまたはアプリケーションはデータソースと直接やり取りします。 これには、アクセスしている特定のデータソースとやり取りできる JDBC ドライバが必要です。 ユーザのコマンドはデータベースまたはその他のデータソースに配信され、それらの文の結果がユーザに送り返されます。 その際、データソースを、ネットワーク経由でユーザが接続しているほかのマシンに置くことも可能です。 これは、クライアント/サーバ構成と呼ばれ、ユーザのマシンがクライアント、データソースを持つマシンがサーバと呼ばれます。 ネットワークは、たとえば社内で社員同士をつなぐイントラネットでも、インターネットでもかまいません。

3 層モデルでは、コマンドがサービスの「中間層」に送信され、中間層がコマンドをデータソースに送信します。 データソースは、コマンドを処理して結果を中間層に送り返し、中間層がそれをユーザに送ります。 3 層モデルでは中間層が企業データに対して行えるアクセスおよび更新の種類について制御を維持することができるので、MIS の責任者はこのモデルを非常に魅力的だと考えています。 また、アプリケーションの開発が簡単になります。 最後に、多くの場合、3 層アーキテクチャの方がパフォーマンス上の利点があります。

図 1.2 は、3 層アーキテクチャのデータベースアクセスを示します。

最近まで、中間層は通常 C または C++ のような高速なパフォーマンスを提供する言語で作成されてきました。 しかし、Java バイトコードを効率的なマシン固有コードに変換する最適化コンパイラ、および Enterprise JavaBeans などのテクノロジが導入されたため、Java プラットフォームが中間層の開発用の標準プラットフォームとして急速に普及しつつあります。 これは、Java の堅牢さ、マルチスレッド処理、およびセキュリティ機能を利用できるという点で、大きな進歩です。

サーバコードを作成するときに Java プログラミング言語を使用する企業が増加しており、JDBC API が 3 層アーキテクチャの中間層で使用されることが多くなっています。 JDBC をサーバテクノロジとしている機能は、接続プール、分散トランザクション、および切断行セットがサポートされるようになりました。 また、Java の中間層からデータソースにアクセスすることができます。

1.2.5 SQL 適合性

SQL は、リレーショナルデータベースにアクセスするための標準言語ですが、望んでいるほどは標準にまだなっていません。

困難な一面は、異なる DBMS (DataBase Management System) で使用されるデータ型がときにはさまざまであり、その違いが重大になり得ることです。 JDBC では、この問題に対して、java.sql.Types クラス内で汎用的な SQL の型識別子のセットを定義することにより対処しています。この説明では、「JDBC SQL の型」、「JDBC の型」、および「SQL の型」という用語は、同じ意味で使用しており、java.sql.Types で定義されている汎用的な SQL の型識別子を表しています。データ型の適合性についての詳細は、「SQL と Java の型のマッピング」を参照してください。

SQL 適合性についてのもう 1 つの問題は、ほとんどの DBMS (データベース管理システム) は、基本機能に標準形式の SQL を使用していますが、より高度な機能に対して最近定義された標準 SQL 構文やセマンティクスに適合していないことです。たとえば、すべてのデータベースがストアドプロシージャや外部結合をサポートしているわけではなく、またサポートしているもの同士に互いに一貫性が保証されていません。 また、SQL3 の機能およびデータ型のサポートも大きく異なります。 SQL の本当に標準的な部分が、より多くの機能を持つように拡張されることが望まれます。 しかし、当分の間は、JDBC API が SQL をそのままサポートする必要があります。

JDBC API がこの問題に対処する 1 つの方法は、すべてのクエリー文字列を、基盤となる DBMS ドライバに渡せるようにすることです。 すなわち、アプリケーションは、望む限りの SQL 機能を自由に使用することができますが、DBMS からエラーを受け取る危険があります。 実際、アプリケーションのクエリーは SQL 以外のものでもよく、特定の DBMS のために設計された SQL の特別な形式 (ドキュメントまたは画像クエリーなど) でもかまいません。

JDBC が SQL の適合性の問題に対処する 2 番目の方法は、ODBC スタイルのエスケープ句を使用することです。 エスケープ構文は、標準の JDBC 構文に、より一般的に利用される SQL の拡張機能をいくつか提供します。 たとえば、日付リテラルおよびストアドプロシージャ呼び出しのためのエスケープがあります。

複雑なアプリケーションでは、JDBC は 3 番目の方法で SQL の適合性に対処します。 JDBC は、アプリケーションが各 DBMS の必要条件や機能に適合するように、DatabaseMetaData インタフェースを使用して DBMS についての記述情報を提供します。 ただし、標準的なエンドユーザは、メタデータについて心配する必要はありません。

JDBC API は、データベースアクセスツールおよびその他の API を開発するための基本 API として使用されるので、その上に構築されるものについての適合性の問題にも言及する必要があります。 JDBC ドライバは、ANSI SQL-92 以上のエントリレベルをサポートしていなければなりません。 (ANSI SQL-92 は、1992 年に米国規格協会が採用した標準です。エントリレベルは、特定の SQL 機能です。) ただし、JDBC 2.0 API では SQL3 および SQLJ がサポートされていますが、JDBC ドライバでのサポートは要求されません。

JDBC API は、データベースベンダー、接続ベンダー、インターネットサービスベンダー、およびアプリケーション作成者にますます広く受け入れられるようになったため、すでに Java プログラミング言語によるデータアクセスの標準になっています。

1.2.6 JDBC 製品

JDBC API を使用すると、Java のアプリケーションおよびアプレットからデータベースに対して簡単にアクセスできるため、JDBC API は Java プラットフォームを使用しているユーザにとって自然な選択となります。

このドキュメントが作成された時点では、いくつかの JDBC ベースの製品がすでに出荷済みまたは開発中です。 これらの製品の状態は頻繁に変化するので、最新の情報については、JDBC の Web ページを参照してください。 この Web サイトは次の URL にあります。

http://java.sun.com/products/jdbc

1.2.7 Java ソフトウェアフレームワーク

Java ソフトウェアは、以下の 3 つの JDBC 製品コンポーネントを提供しています。

DriverManager クラスは伝統的に JDBC アーキテクチャのバックボーンとなっています。 これは非常に小さくて簡単なクラスです。 その主な機能は、Java アプリケーションを正しい JDBC ドライバに接続し、またそれを取り除くことです。 標準拡張機能パッケージの javax.naming および javax.sql を使用できるため、Java Naming and Directory InterfaceTM (JNDI) ネームサービスに登録された DataSource オブジェクトを使用してデータソースとの接続を確立できるようになりました。 いずれの方法でも接続できますが、可能な場合には DataSource オブジェクトの使用をお勧めします。

JDBC ドライバテストスイートにより、JDBC ドライバがユーザのプログラムを実行する際の信頼性がある程度得られます。 このテストは、総合テストまたは詳細テストではありませんが、JDBC API の重要な機能の大部分をテストできます。

JDBC-ODBC ブリッジにより、ODBC ドライバを JDBC ドライバとして使用できます。 これは、JDBC をすぐに使用するための方法として実装されています。 将来的には、JDBC ドライバが実装されていないデータソースのいくつかにアクセスする方法も提供する予定です。

1.2.8 JDBC ドライバのタイプ

図 1.3 は、さまざまなドライバ実装の例です。

JDBC テクノロジベースのドライバは、一般に、次の 4 つのカテゴリのどれかにあたります。

  1. JDBC-ODBC ブリッジと ODBC ドライバの組み合わせ。 Java ソフトウェアのブリッジ製品は、ODBC ドライバ経由の JDBC アクセスを可能にします。 ODBC バイナリコード、および多くの場合のデータベースクライアントコードは、このドライバを使用するクライアントマシンに置く必要があります。 結果として、この種のドライバは、クライアントのインストールが大きな問題にはならない企業ネットワークや、Java で 3 層アーキテクチャに作成されたアプリケーションサーバコードに最適です。
  2. 一部が Java ドライバであるネイティブ API。 この種のドライバは、JDBC 呼び出しを、Oracle、Sybase、Informix、IBM DB2、またはその他の DBMS のためのクライアント API の呼び出しに変換します。 このスタイルのドライバを使用する場合、ブリッジドライバと同様、一部のオペレーティングシステム固有のバイナリコードを各クライアントマシンにロードする必要があります。
  3. JDBC-Net Pure Java ドライバ。 このドライバは、JDBC 呼び出しを DBMS に依存しないネットプロトコルに変換します。その後でサーバによって DBMS プロトコルに変換されます。 このネットサーバミドルウェアは、その Pure Java クライアントを多くの異なるデータベースに接続できます。 使用されるこの特有のプロトコルはベンダーに依存します。 一般的に、これがもっとも柔軟な JDBC の代替です。 このソリューションのベンダーはすべて、イントラネットでの使用に合った製品を提供しようとしているようです。 これらの製品がインターネットアクセスをもサポートするためには、Web が課すセキュリティやファイアウォールを通じたアクセスなどの要求を扱う必要があります。
  4. ネイティブプロトコル Pure Java ドライバ。 この種のドライバは、JDBC 呼び出しを DBMS が使用するネットワークプロトコルに直接変換します。 これにより、クライアントマシンから DBMS サーバへの直接呼び出しが可能になります。イントラネットアクセスのための優れたソリューションといえます。 これらのプロトコルの多くは所有権に基づいているので、データベースベンダー自身が主な供給元となります。 現在、Oracle、Sybase、Informix、IBM DB2、Inprise InterBase、および Microsoft SQL Server を含めたいくつかのデータベースで使用できます。

ドライバのカテゴリ 3 と 4 は、JDBC API を使用してデータベースにアクセスするのに適しています。 カテゴリ 1 と 2 のドライバは、直接 Pure Java ドライバがまだ使用可能でない間の過渡的なソリューションです。 カテゴリ 1 と 2 には (以下のテーブルには示していない) ミドルウェアを必要とする種類のものが可能ですが、一般的には望ましいソリューションのレベルには到達していません。カテゴリ 3 と 4 が、自動インストールを始めとした、Java テクノロジのすべての利点を提供します (たとえば、JDBC ドライバを、それを使用するアプレットとともにダウンロードするなど)。

表 1.1 に、4 つのカテゴリとそのプロパティを示します。 この表では、ネットワーク接続の種類について、次の定義を使用しています。

1.2.9 JDBC ドライバの入手

このドキュメントが作成された時点では、Java ソフトウェアのブリッジとともに使用できるカテゴリ 1 の ODBC ドライバが数多くあります。 DBMS 用のネイティブ API の上に構築されているカテゴリ 2 のドライバは約 12 あります。 カテゴリ 3 のドライバは、多数利用できます。主要な DBMS には、カテゴリ 4 のドライバが存在します。

ドライバについての最新の情報を取得するには、次に示す JDBC の Web ページを参照してください。

 http://java.sun.com/products/jdbc

Java ソフトウェアおよび主要なデータベース接続ベンダーである Intersolv は、協力して JDBC-ODBC ブリッジと JDBC ドライバのテストスイートの開発にあたっています。

1.2.10 Java リレーショナル DBMS

Java リレーショナル DBMS と呼ばれる、Java 対応の次世代 DBMS が発表される予定です。 この新しい DBMS には、新しいデータ型が組み込まれており、Java プログラミング言語のオブジェクトをデータベーステーブルの列の値として使用することができます。 JDBC 2.0 の新機能では、この次世代の DBMS がサポートされています。また、複数のデータベースベンダーが、Java リレーショナル機能を使用した製品を開発中です。 ただし、この 2.0 の機構はオプションです。 DBMS でこの機能がサポートされていない場合、JDBC 2.0 ドライバではこの機能を実装する必要はありません。

1.2.11 その他の製品

さまざまな JDBC アプリケーションの開発が進行中です。 最新情報については、Java ソフトウェアのページを参照してください。



[目次] [前の項目] [次の項目]

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