ナビゲーション・リンクをスキップ
Java(tm) Platform
Standard Edition 8

パッケージ 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(tm) Platform
Standard Edition 8

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