• 検索結果がありません。

JDBC APIを使用すると、Javaプログラムにおけるセッションの作成、SQL文の実行、リ

レーショナル・データベースからの実行結果の取得、および特定のベンダーに依存しないリ レーショナル・データへのアクセスが可能になります。JDBC仕様では、X/Open SQLの

Call Level Interface(CLI)に基づいたJava用のSQL CLIが用意されています。

JDBC APIは、JDBCドライバ、Connection、StatementおよびResultSetという4つの主要 な構成要素で構成されています。各データベース・ベンダーは、JDBCドライバのみを提供 します。このドライバは、JDBC仕様(詳細は、6-3ページの「データベース・ドライバ」を 参照)に準拠している必要があります。Connection、StatementおよびResultSetコンポー ネントは、JDBC APIパッケージ内(java.sqlパッケージ)にあります。

JDBC APIには、これらのコンポーネントでの操作を可能にする次のインタフェース・クラ

スがあります。

java.sql.Driverおよびjava.sql.DriverManager。JDBCドライバを管理しま す。

java.sql.Connection。データベース接続を使用します。

java.sql.Statement。SQL文を作成および実行します。

java.sql.ResultSet。実行結果を処理します。

JDBC 2.0 APIには、java.sqlパッケージに数多くの新機能が追加されています。また、標

準拡張パッケージのjavax.sqlも新たに用意されています。java.sqlパッケージの新機 能には、SQL3データ型、スクロール可能結果セット、プログラム更新およびバッチ更新な どのサポートが含まれます。

JDBCの新しい標準拡張APIは、Enterprise JavaBeans(EJB)の中核をなすテクノロジであ り、接続プーリングを使用する分散トランザクションを実現します。また、ファイルやスプ レッドシートなど、ほとんどの表形式データソースに接続できます。

JDBCアプリケーションを作成する際に必要なドライバ固有情報は、データベースURLのみ です。このURL情報が実行時に引き継がれるように、JDBCアプリケーションを設計するこ とも可能です。アプリケーションは、まずデータベースURL、ユーザー名およびパスワード を使用して、DriverManagerからjava.sql.Connectionを要求します。

JDBCプログラムでは、通常、次の順序で処理が行われます。

1. ドライバのクラス名を使用して、データベース・ドライバをロードします。

2. 接続用のJDBC URLを指定して、接続を取得します。

3. SQL文を作成してから実行します。

4. 結果セットを使用して、実行結果を検索します。

5. 接続を閉じます。

データベース・ドライバ データベース・ドライバ データベース・ドライバ データベース・ドライバ

JDBCでは、指定したJDBCドライバへの標準APIのコールが定義されます。JDBCドライ バは、データ・インタフェース用のコマンドが実際に実行されるソフトウェアです。このド ライバは、低レベルのJDBC APIとして位置付けられています。ドライバとのやり取りに は、データベースのクライアント・コール、またはデータベース・サーバーによってサービ スされるデータベースのネットワーク・プロトコル・コマンドを使用します。

JDBC APIコールを変換するJDBCドライバは、そのインタフェース型に応じて、次の4種

類に分類されます。

タイプ1、JDBC-ODBC Bridge: JDBC APIコールをODBC APIコールに変換します。

タイプ2、ネイティブAPIドライバ: JDBC APIコールをデータベースのネイティブAPI コールに変換します。このドライバではネイティブAPIが使用されるため、ベンダーに 依存します。ドライバは、2つのコンポーネントで構成されます。変換が行われるJava 言語のコンポーネントとネイティブAPIのライブラリ・セットを含むコンポーネントで す。

タイプ3、ネットワーク・プロトコル: JDBC APIコールをDBMSに依存しないネット ワーク・プロトコル・コールに変換します。データベース・サーバーは、このネット ワーク・プロトコル・コールを特定のDBMS操作に変換します。

タイプ4、ネイティブ・プロトコル: JDBC APIコールをDBMS固有のネットワーク・プ ロトコル・コールに変換します。データベース・サーバーは、このコールをDBMS操 作に変換します。

DriverManager クラス クラス クラス クラス

Javaプログラムでは、各種のドライバを使用することによって、様々なデータベースへの接 続を作成できます。これらのドライバの操作を管理するために、JDBCには

java.sql.DriverManagerというドライバ・マネージャ・クラスがあります。このクラ スはドライバをロードし、データベースへの新規接続を作成します。

JDBC ドライバの登録 ドライバの登録 ドライバの登録 ドライバの登録

DriverManagerには、使用するJDBCドライバがすべて登録されます。Javaプログラムで 登録されていないドライバに対するJDBC操作が実行されると、No Suitable Driver例 外が発生します。

ドライバは、次のいずれかの方法で登録できます。

次のクラスを使用して、ドライバを明示的に登録します。

DriverManager.registerDriver(driver-instance)

次のクラスを使用して、ドライバをロードします。

Class.forName(driver-class)

ここで、driver-classはJDBCドライバ・クラスを表します。これにより、Java

Virtual Machineにドライバがロードされます。各ドライバは、ロードされた後、

DriverManager.registerDriverメソッドを使用して、暗黙的な登録を実行する必 要があります。

たとえば、COM.ibm.db2.jdbc.appパッケージでタイプ2のDB2 JDBCドライバを登 録するには、次のように設定します。

DriverManager.registerDriver(new COM.ibm.db2.jdbc.app.DB2Driver());

または

Class.forName("COM.ibm.db2.jdbc.app.DB2Driver");

Oracleデータベースの場合は、

DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver ());

または

Class.forName("oracle.jdbc.driver.OracleDriver")

J2EEサーバーは、JDBCドライバ構成に基づいてドライバを暗黙的にロードするため、ドラ イバのロードにクライアント固有のコードは必要ありません。データソース・オブジェクト の参照には、Java Naming and Directory Interface(JNDI)ツリーを使用できます。

WebSphere Advanced Edition 3.5.3では、DB2、Informix、Microsoft SQL Server、Oracle、

Sybase、Versantおよびその他のデータベースをサポートしています。ただし、Oracleの

Thick JDBCドライバはサポートしていません。OracleのThick JDBCドライバを使用するに

は、「データソースの構成」で説明しているように、データソースをOracle Containers for J2EE(OC4J)で構成します。OC4Jによって、サーバー起動時にドライバ・クラスが自動的 にロードされます。

注意 注意注意

注意: タイプ3のJDBCドライバ(COM.ibm.db2.jdbc.app.DB2Driver - jdcb:db2:DBNAME)を使用する場合は、DB2 Client Application Enabler

(CAE)をインストールしてからリモート・データベースをカタログに追加す る必要があります。OC4Jでは、カタログに追加したデータベースがローカ ル・データベースとして扱われます。

DataSource クラス クラス クラス クラス

JDBC 2.0仕様では、java.sql.Datasourceクラスが導入され、JDBCプログラムが100%

移植可能になりました。このバージョンでは、ベンダー固有の接続URLおよびマシンと ポートの依存関係が削除されました。また、このバージョンでは

java.sql.DriverManager、Driver、DriverPropertyInfoの各クラスの使用を控え るように推奨されています。以前のJDBC DriverManager機能は、今回のデータソース機 能に完全に置き換わりました。ドライバ・マネージャ・クラスをクライアント・アプリケー ションのランタイムに明示的にロードするかわりに、集中化されたJNDIサービス・ルック アップによってjava.sql.Datasourceオブジェクトが取得されます。Datasourceオブ ジェクトを使用してデータベースに接続することもできます。

JDBC 2.0 API仕様に従って、JDBCサブコンテキストまたはそのいずれかの子コンテキスト

の下にデータソースが登録されます。JDBCコンテキスト自体は、ルート・コンテキストの 下に登録されます。Datasourceオブジェクトは、データソースへのコネクション・ファク トリです。WebSphereとOC4Jは、どちらもJDBC 2.0 DataSource APIをサポートしてい ます。

データソースの構成 データソースの構成 データソースの構成 データソースの構成

WebSphereでデータソースを構成するには、Administrative Consoleを使用して、データ

ソース名、データベース名およびJDBC URL文字列を指定します。この情報は、リポジト リ・データベースに格納されます。

OC4Jでは、フラット・ファイルを使用して、デプロイしたすべてのアプリケーションに対 してデータソースを構成します。データソースは、次のディスクリプタ・ファイルで指定さ れます。

UNIXの場合

ORACLE_HOME/j2ee/home/config/data-sources.xml

NTの場合

ORACLE_HOME¥j2ee¥home¥config¥data-sources.xml

次に示すのは、Oracleデータベースのデータソース構成の例です。data-sources.xmlの データソース(xa-location、ejb-locationおよびpooled-location)は、それぞれ 一意にする必要があります。

<data-source

class="com.evermind.sql.DriverManagerDataSource"

name="Oracle"

url="jdbc:oracle:thin@node2058.oracle.com:1521:orcl"

xa-location="jdbc/xa/OracleXADS"

ejb-location="jdbc/OracleDS"

pooled-location="jdbc/OraclePoolDS"

schema="database-schemas/oracle.xml"

inactivity-timeout="30"

max-connections="20"

/>

表6-1では、data-sources.xmlのすべての構成パラメータを説明しています(前述の例 に示されていないパラメータもあります)。

表 表表

6-1 data-sources.xmlファイルファイルファイルファイル パラメータ

パラメータパラメータ

パラメータ 説明説明説明説明

class データソースのクラス名。

connection-driver JDBCドライバのクラス名。

connection-retry-interval

失敗した接続を再試行するまでの待機時間(秒)。デフォルトは 1。

ejb-location EJB対応で、このデータソースのプーリングされたバージョンを

バインドするためのJNDIパス。このバージョンは、コンテナ管 理のトランザクションに関係します。このタイプのデータソース は、EJBおよび同様のオブジェクト内から使用します。

このパラメータが適用されるのは、ConnectionDataSourceの みです。

inactivity-timeout 使用されていない接続を閉じるまでにキャッシュしておく時間

(秒)。

location このデータソースをバインドするためのJNDIパス。

max-connect-attempts 失敗した接続を再試行する回数。デフォルトは3。

max-connections データソースをプーリングするために開いておく接続の最大数。

min-connections データソースをプーリングするために開いておく接続の最小数。

デフォルトはゼロ。

name データソースの表示名。

password データソースにアクセスするためのユーザー・パスワード(省略

可)。

pooled-location このデータソースのプーリングされたバージョンをバインドする

ためのJNDIパス。このパラメータが適用されるのは、

ConnectionDataSourceのみです。

schema データベースに接続するためのdatabase-schemaファイルへの相

対パスまたは絶対パス。

source-location この特殊データソースの基礎となったデータソース。