本節では、JDBCをプログラムに読み込み、初期化する方法を説明します。
JDBC を使う全てのソースでは、java.sql パッケージをインポートする必要があります。 次のように使います。
import java.sql.*;
注意: org.postgresql パッケージをインポートしないでください。 そうした場合、javac が混乱してしまい、ソースをコンパイルすることができません。
データベースに接続する前に、ドライバを読み込む必要があります。 2 つの方法があり、どちらが最適なのかは作成するコードに依存します。
第一の方法は、コードの中で暗黙的に Class.forName() メソッドを使ってドライバを読み込みます。 PostgreSQL の場合は、次のように記述します。
Class.forName("org.postgresql.Driver");
これでドライバが読み込まれます。 読み込まれると、ドライバは自動的に自分自身を JDBC に登録します。
注意: ドライバが利用できない場合に、forName() メソッドは ClassNotFoundException 例外を発生します。
これは最も一般的に使われる方法ですが、そのコードは PostgreSQL だけでしか使えなくなります。 今後、他のデータベースにアクセスする可能性があり、また、PostgreSQL 固有の拡張機能を使用しないのならば、次に紹介する 2 番目の方法を勧めます。
二番目の方法は、-D オプションを使用して、ドライバをパラメータとして JVM の起動時に渡すことです。 例を以下に示します。
java -Djdbc.drivers=org.postgresql.Driver example.ImageViewer
この例では、JVM はその初期化段階の一部としてドライバの読み込みを試みます。 読み込みが完了したところで、ImageViewer が起動します。
さて、コードをコンパイルし直すことなく他のデータベースパッケージにも使うことができますので、この方法は最初の方法よりも優れています。 唯一の変更点は接続のための URL だけです。 これについては、次節で説明します。
最後に注意点ですが、コード内で Connection を開こうとした時に、利用できるドライバがない (No driver available) というSQLException例外が発生した場合、たいていはドライバがクラスパスにないこと、もしくはパラメータの値が正しくないことが原因です。
JDBCを使用する場合、データベースは URL(Uniform Resource Locator)で表されます。 PostgreSQLでは次の形式のどれかになります。
jdbc:postgresql:database
jdbc:postgresql://host/database
jdbc:postgresql://host:port/database
パラメータの意味を以下に示します。
サーバのホスト名です。 デフォルトはlocalhostです。 IPv6アドレスを指定するためには、以下のようにhostを角括弧で括る必要があります。
jdbc:postgresql://[::1]:5740/accounting
サーバが監視しているポート番号です。 デフォルトは PostgreSQL の標準的なポート番号(5432)です。
データベース名です。
接続するために、JDBC から Connection のインスタンスを取得しなければなりません。 これには、次のように DriverManager.getConnection() メソッドを使います。
Connection db = DriverManager.getConnection(url, username, password);