目次 | 前の項目 | 次の項目 | JDBCTM ガイド: 入門 |
DriverManager.getConnection メソッドは引数として URL を受け取ります。JDBC 管理層は、その URL で表されるデータベースに接続可能なドライバを探します。JDBC 管理層は、各ドライバに、指定された URL に接続できるかどうかを順番に問い合わせる (6.2 項を参照) ことによりこれを行います。1 ドライバは、その URL が自分のサポートしているサブプロトコルを指定しているかどうかを調べ (6.3 項を参照)、指定している場合は、そのデータベースへの接続を試みます。接続の確立に成功すると、適切な java.sql.Connection オブジェクトを返します。
java.sql.Connection オブジェクトからは、java.sql.Statement、java.sql.PreparedStatement、java.sql.CallableStatement オブジェクトを取得でき、それらのオブジェクトを使って SQL 文を実行できます。
また、接続中には、アプリケーションは JDBC 管理層をバイパスして、明示的に特定のドライバを選んで使用することが許可されます。
JDBC では、ユーザが Java プロパティ jdbc.drivers を設定してドライバのリストを指定することができます。このプロパティを定義する場合は、ドライバのクラス名のリストをコロンで区切って、たとえば「acme.wonder.Driver:foobaz.openNet.Driver:vendor.OurDriver」のように記述します。
ドライバを探すとき、JDBC は指定された URL に接続可能なドライバのうち、最初に見つかったものを使用します。JDBC は最初、sql.drivers リストに指定されている各ドライバから、指定されている順序で探します。次に、ロード済みのドライバから、ロードされた順に探します。ドライバが「信頼されない」コードの場合、接続を試みているコードと同じソースからロードされたドライバでない限り、そのドライバはスキップされます (第 5 章のセキュリティの説明を参照)。
サブプロトコルには、1 つまたは複数のドライバがサポートするデータベースコネクティビティ機構の特定の種類を名付けます。サブネームの内容と構文は、サブプロトコルに依存します。
サブネームの一部としてネットワークアドレスを指定する場合は、標準 URL のサブネームのためのネーミング規約「//hostname:port/subsubname」に従うことをお勧めします。サブネームは任意の内部構文を持つことができます。
この例では、サブプロトコルは odbc で、サブネームはローカルの ODBC データソース名 fred です。JDBC-ODBC ドライバは、サブプロトコル odbc を持つ URL を検索してから、ODBC SQLConnect でサブネームを使用できます。
汎用のデータベースコネクティビティプロトコル dbnet を使用してデータベースリスナーと通信する場合は、次のような URL を使用します。
この URL は、「ホスト wombat のポート 356 に接続するために dbnet プロトコルを使用し、目的のデータベースを探すためにそのポートにサブネーム fred を提示する」ことを指定しています。
ネットワークのネームサービスを使ってデータベース名の中で間接指定を行いたい場合は、サブプロトコルとしてネームサービス名を使用することを推奨します。この場合の URL は次のようになります。
jdbc:dcenaming:accounts-payable
この URL は、「ローカルの DCE ネームサービスを使ってデータベース名 accounts-payable を解釈して、実際のデータベースへの接続に使用できる特定の名前に変換する」ことを指定しています。場合によっては、疑似ドライバを準備して、ネットワークネームサーバを通じて名前の検索を行なってから、その結果情報を使って実際のドライバを探し、実際の接続を開くと良い場合があります。
odbc サブプロトコルの完全な URL 構文は次のとおりです。
jdbc:odbc:<データソース名>[;<属性名>=<属性値>]*
したがって、次の jdbc:odbc 名は有効です。
jdbc:odbc:qeor7
jdbc:odbc:wombat
jdbc:odbc:wombat;CacheSize=20;ExtensionCase=LOWER
jdbc:odbc:qeora;UID=kgh;PWD=fooey
アプレットに汎用的なデータベースアクセスを可能にするため、できるだけ多くの接続情報を URL の一部に符号化し、ドライバでなるべくプロパティセットを使用しないようなプログラミングを推奨します。
JDBC の java.sql.DriverManager クラスは初期化時に、システムプロパティの中で sql.drivers プロパティを探します。このプロパティが存在する場合は、コロンで区切られたドライバクラス名のリストになっているはずです。このリストの各クラスは java.sql.Driver インタフェースを実装しています。DriverManager クラスは、この各 Driver クラスをロードしようとします。
もう 1 つの方法として、プログラマが標準の Class.forName メソッドを使って明示的にドライバクラスをロードすることができます。たとえば、acme.db.Driver クラスをロードするには次のようにします。
Class.forName("acme.db.Driver");
どちらの場合も、新しくロードされた Driver クラスには、DriverManager.registerDriver メソッドを使って自ら DriverManager に登録する責任があります。これにより、DriverManager がデータベース接続を作成しようとするとき、このドライバを使用できます。
セキュリティ上の理由から、JDBC 管理層はどのクラスローダがどのドライバを提供したかという記録を保持し、接続を開くときには、ローカルファイルシステム、または getConnection 要求を発行したコードと同じクラスローダから提供されるドライバだけを使用します。
jdbc@wombat.eng.sun.com または jdbc-odbc@wombat.eng.sun.com Copyright © 1996, 1997 Sun Microsystems, Inc. All rights reserved.