Java™ Platform
Standard Edition 7

パッケージ javax.sql

JavaTM プログラミング言語からのサーバー側のデータソースのアクセスと処理に使用する API を提供します。

参照: 説明

パッケージ javax.sql の説明

JavaTM プログラミング言語からのサーバー側のデータソースのアクセスと処理に使用する API を提供します。このパッケージは java.sql パッケージの補足であり、バージョン 1.4 以降の Java Platform, Standard Edition (Java SETM) に含まれています。Java Platform, Enterprise Edition (Java EETM) では、引き続き主要部分として扱われます。

javax.sql パッケージは、次の API を提供します。

  1. データソースとの接続を確立するための、DriverManager の代替となる DataSource インタフェース
  2. 接続プールと文のプール
  3. 分散トランザクション
  4. 行セット

アプリケーションでは DataSourceRowSet を直接使用しますが、接続プール API と分散トランザクション API は中間層インフラストラクチャーによって内部的に使用されます。

DataSource オブジェクトを使用した接続の確立

javax.sql パッケージでは、データソースとの接続を確立するための最適な方法を提供しています。元のメカニズムである DriverManager クラスも依然として有効であり、このクラスを使用したコードも引き続き実行できます。ただし、DriverManager メカニズムよりも多くの利点があるため、新しい DataSource メカニズムを使用することをお薦めします。

接続を確立する際に DataSource を使用する主な利点を挙げます。

ドライバのベンダーは DataSource の実装を提供します。特定の DataSource オブジェクトは、特定の物理データソースを表します。DataSource オブジェクトが作成する各接続は、その物理データソースへの接続になります。

データソースの論理名は、通常はシステム管理者やシステム管理者の作業を行うユーザーによって、Java Naming and Directory InterfaceTM (JNDI) API を使用するネームサービスに登録されます。アプリケーションでは、登録されている論理名を検索して、必要な DataSource オブジェクトを取得します。そして、取得した DataSource オブジェクトを使用して、このオブジェクトが表す物理データソースへの接続を作成します。

DataSource オブジェクトが作成した接続をプールし、再利用するため、このオブジェクトを、中間層インフラストラクチャーと連携して動作するように実装することができます。このような DataSource 実装を使用するアプリケーションは、自動的に、接続プールにある接続を取得します。DataSource オブジェクトが作成した接続を、特別なコーディングをしないで分散トランザクションで使用したい場合も、このオブジェクトを、中間インフラストラクチャーと連携して動作するように実装します。

接続プールと文のプール

中間層接続プール管理プログラムで動作するように実装された DataSource オブジェクトによって作成された接続は、接続プールに追加されます。新しい接続の作成は非常に負荷が大きい作業であるため、これによりパフォーマンスが飛躍的に向上します。接続プールでは、接続の利用および再利用が可能です。そのため、作成する必要のある新規接続の数は大幅に削減されます。

接続プールは完全に透過的です。Java EE の構成の中間層で自動的に行われ、アプリケーションの観点からは、コードを変更する必要はありません。アプリケーションでは単に DataSource.getConnection メソッドを使用してプールされた接続を取得し、Connection オブジェクトを使用するのと同じ方法で使用します。

接続プールに使用されるクラスとインタフェースは次のとおりです。

接続プール管理プログラムは 3 層アーキテクチャーの中間層で機能し、これらのクラスやインタフェースを背後で使用します。PooledConnection オブジェクトを作成するために ConnectionPoolDataSource オブジェクトが呼び出されると、接続プール管理プログラムによって新しい PooledConnection オブジェクトが ConnectionEventListener オブジェクトとして登録されます。接続が終了するか、エラーが発生した場合、接続プール管理プログラム (リスナー) は、ConnectionEvent オブジェクトを含む通知を受け取ります。

接続プール管理プログラムが PreparedStatements 用として Statement のプールをサポートする場合 (サポートするかどうかは、DatabaseMetaData.supportsStatementPooling メソッドを呼び出すことで判断可能)、接続プール管理プログラムは、自身を StatementEventListener オブジェクトとして新しい PooledConnection オブジェクトに登録します。PreparedStatement が閉じるか、エラーが発生した場合、接続プール管理プログラム (リスナー) は、StatementEvent オブジェクトを含む通知を受け取ります。

分散トランザクション

プールされた接続と同様、中間層インフラストラクチャーで動作するように実装された DataSource オブジェクトによって作成された接続も、分散トランザクションに参加することがあります。これにより、アプリケーションは、単一トランザクションで複数サーバー上のデータソースにアクセスできるようになります。

分散トランザクションに使用されるクラスとインタフェースは次のとおりです。

これらのインタフェースはトランザクションマネージャーによって使用され、アプリケーションが直接使用することはありません。

XAConnection インタフェースは PooledConnection インタフェースから派生しているため、プールされた接続に適用されることは、分散トランザクションを構成する接続にも適用されます。中間層のトランザクションマネージャーは、すべての処理を透過的に行います。アプリケーションコードの唯一の変更点は、アプリケーションがトランザクションマネージャーのトランザクション処理を妨害できなくなったことです。特に、アプリケーションは、Connection.commit メソッドや Connection.rollback メソッドを呼び出すことができません。また、接続を自動コミットモードに設定することもできません。つまり、Connection.setAutoCommit(true) を呼び出すことはできません。

アプリケーションは、特別な処理を行うことなく分散トランザクションに参加できます。通常どおり、DataSource.getConnection メソッドを使って、使用するデータソースへの接続を作成するだけで済みます。トランザクションマネージャーは、トランザクションを背後で管理します。XADataSource インタフェースは XAConnection オブジェクトを作成し、各 XAConnection オブジェクトはトランザクションマネージャーが接続を管理するために使用する XAResource オブジェクトを作成します。

行セット

RowSet インタフェースは、ほかのさまざまなクラスやインタフェースとともに背後で動作します。これらのクラスやインタフェースは 3 つのカテゴリに分けられます。
  1. イベント通知
    • RowSetListener
      RowSet オブジェクトは、JavaBeansTMプロパティーを持ち、JavaBeans のイベント通知メカニズムに参加しているため、JavaBeans のコンポーネントであると言えます。RowSetListener インタフェースは、特定の RowSet オブジェクトに発生するイベントを通知してもらいたいコンポーネントによって実装されます。そのようなコンポーネントは、RowSet.addRowSetListener メソッドを使用して、自身をリスナーとして行セットに登録します。

      RowSet オブジェクトが 1 行を変更、全行を変更、またはカーソル位置を移動すると、このオブジェクトに登録された各リスナーにも通知されます。リスナーは、通知メソッドの実装を呼び出すことによって実行します。

    • RowSetEvent
      内部通知プロセスの一部として、RowSet オブジェクトは RowSetEvent のインスタンスを作成してリスナーに渡します。リスナーは渡された RowSetEvent オブジェクトを使用して、どの行セットにイベントがあるかを検出できます。

  2. メタデータ
    • RowSetMetaData
      このインタフェースは ResultSetMetaData インタフェースから派生しており、RowSet オブジェクトの列に関する情報を提供します。アプリケーションでは RowSetMetaData メソッドを使用して、行セットに含まれる列数や各列に含めることができるデータの種類を検出できます。

      RowSetMetaData インタフェースは列に関する情報を設定するメソッドを提供しますが、通常、アプリケーションがこれらのメソッドを使用することはありません。アプリケーションが RowSetexecute メソッドを呼び出すと、RowSet オブジェクトは行の新しいセットを格納し、RowSetMetaData オブジェクトは内部的に更新されて、新しい列に関する情報を含むようになります。

  3. リーダー/ライター機能
    RowSetInternal インタフェースを実装する RowSet オブジェクトは、関連する RowSetReader オブジェクトを呼び出すことで、自身にデータを読み込むことができます。また、関連する RowSetWriter を呼び出して、行に加えた変更を、データを取得した場所からデータソースへ書き戻すことができます。引き続きデータソースに接続されている行セットは、データソース上で直接動作するので、リーダーやライターを使用する必要はありません。
    • RowSetInternal
      RowSetInternal インタフェースを実装することで、RowSet オブジェクトでは内部状態にアクセスしたり、リーダーやライターを呼び出したりできるようになります。行セットは現在の行の値と、の値として参照される、現在の行の直前にある行の値を追跡します。行セットは、(1) コマンド用に設定されたパラメータと、(2) 行セットに渡された接続 (存在する場合) も追跡します。行セットは RowSetInternal メソッドを背後で使用することでこれらの情報にアクセスします。アプリケーションがこれらのメソッドを直接呼び出すことは通常ありません。

    • RowSetReader
      RowSetInternal インタフェースを実装する、切断された RowSet オブジェクトはリーダー (このオブジェクトに関連付けられた RowSetReader オブジェクト) を呼び出して、データを自身に読み込むことができます。アプリケーションが RowSet.execute メソッドを呼び出すと、このメソッドが行セットのリーダーを呼び出し、ほとんどの作業を行います。リーダーの実装はさまざまですが、一般には、データソースへの接続を確立し、データソースからデータを読み込み、そのデータを行セットに追加し、接続を閉じます。また、リーダーはその行セット用に RowSetMetaData オブジェクトを更新することもあります。行セットの内部状態も、リーダーによって、または直接 RowSet.execute メソッドによって更新されます。
    • RowSetWriter
      RowSetInternal インタフェースを実装する、切断された RowSet オブジェクトは、ライター (このオブジェクトに関連付けられた RowSetWriter オブジェクト) を呼び出して、変更を配下のデータソースに書き戻すことができます。ライターの実装はさまざまですが、一般には次のように動作します。

      • データソースへの接続を確立する
      • 矛盾があるかどうか、つまり、行セット内の変更された値がデータソースでも変更されているかどうかを確認する
      • 矛盾がない場合は、新しい値をデータソースへ書き込む
      • 接続を閉じる

RowSet インタフェースは多くの方法で実装でき、誰もが実装を作成できます。開発者は自由に想像力を働かせ、行セットの新しい使用方法を見つけ出すことが推奨されています。

重要: 「導入されたバージョン: 1.6」と表示された API を使用するコードは、JDBC 4.0 API を実装する JDBC テクノロジドライバを使って実行する必要があります。使用する特定の機能がドライバに実装されているかどうかを、ドライバのドキュメントで確認してください。

パッケージの仕様

関連項目

Addison-Wesley Longman から出版されている Java Series ブックでは、javax.sql パッケージのクラスやインタフェースに関する詳細な情報を参照できます。

導入されたバージョン:
1.4
Java™ Platform
Standard Edition 7

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