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);
標準的な接続パラメータに加え、ドライバは複数の追加プロパティをサポートしています。 これにより、PostgreSQL™固有のドライバの動作を指定することができます。 これらのプロパティは接続URLでも指定できますし、DriverManager.getConnectionのPropertiesオブジェクトパラメータとしても指定できます。 以下の例では、SSL接続を確立するための方法を両方の方式で示しています。
String url = "jdbc:postgresql://localhost/test";
Properties props = new Properties();
props.setProperty("user","fred");
props.setProperty("password","secret");
props.setProperty("ssl","true");
Connection conn = DriverManager.getConnection(url, props);
String url = "jdbc:postgresql://localhost/test?user=fred&password=secret&ssl=true"; Connection conn = DriverManager.getConnection(url);
作成する接続を使用するデータベースユーザです。
データベースユーザのパスワードです。
SSLを使用して接続します。 ドライバはSSLサポート付きでコンパイルされていなければなりません。 このプロパティには値を関連付ける必要はありません。 プロパティが存在するだけでSSL接続を指定したことになります。 しかし、今後のバージョンとの互換性のため、"true"という値を勧めます。 詳細は第4章を参照してください。
SSL接続を確立する際にSSLSocketFactoryとして使用されるクラス名を値として指定します。 詳細はカスタムSSLSocketFactory項を参照してください。
この値は、上で指定されたsslfactoryクラスのコンストラクタの引数(省略可能)です。 詳細はカスタムSSLSocketFactory項を参照してください。
古めのアプリケーションとの互換性を保つために、古いバージョンのドライバと同様に動作します。 現時点ではバイナリデータフィールドの扱いとsetString()経由のパラメータセットの扱いという2つのドライバの振舞いを制御します。
より古いバージョンのドライバでは、このプロパティを使用してバックエンドとの接続に使用するプロトコルも制御していました。 これは今ではprotocolVersionプロパティで制御されます。
バイナリデータの扱いについての詳細は第7章を参照してください。 ラージオブジェクトの使用を強制するには、互換性プロパティを7.1に設定してください。
compatibleが7.4以下に設定されている場合、stringtypeパラメータのデフォルトはunspecifiedに変更されます。
ドライバはV2およびV3フロントエンド/バックエンドプロトコルをサポートします。 V3プロトコルは7.4で導入されました。 ドライバはデフォルトでV3プロトコルの使用を試み、失敗した場合にV2プロトコルに落とします。 protocolVersionプロパティが指定された場合、ドライバは指定されたプロトコル("2"または"3"のどちらか)のみを試みます。 protocolVersionを"2"に設定することで、バージョン7.3以前のサーバと接続する時のV3プロトコル試行の失敗を防ぐことができます。 また、7.4以上のサーバとの接続を強制的にV2プロトコルで行わせることもできます。
LogStreamやLogWriter用にDriverManagerの現在値に表示されるログ情報の量を設定します。 現在org.postgresql.Driver.DEBUG(2)およびorg.postgresql.Driver.INFO(1)という値をサポートしています。 INFOではログ情報がほとんどありませんが、DEBUGではかなり詳細な情報を生成します。 実際のところ、このプロパティはドライバの開発者やドライバに問題がある場合にのみ有用です。
データベースに送信するデータ、データベースから受け取るデータで使用される文字セットです。 このプロパティは、サーバのバージョンが7.2以下の場合にのみ重要です。 リリース7.3で初めてマルチバイトサポートがデフォルトで組み込まれ、ドライバは独自に変換機能を行うのではなく文字セット変換機能を使用するようになりました。
V3プロトコルを使用する場合、ドライバはエンドユーザによる変更がないはずの特定のサーバ設定用パラメータが変更されたかどうかを監視します。 client_encoding設定はドライバによって設定され、変更されないはずです。 ですので、ドライバは変更を検出すると接続を中断します。 しかし、この動作には1つの妥当な例外があります。 サーバのファイルシステム上に存在するファイルに対してCOPYを使用する場合です。 この場合、ファイルシステムの符号化方式を指定するには、client_encoding設定を変更するしかありません。 JDBCチームはこれをCOPYコマンドの失敗とみなしています。 また、将来この他の符号化方式の指定方法が提供されることを望んでいますが、今のところはこのURLパラメータが存在します。 コピーを行う時にクライアント符号化方式を変更する必要がある場合にのみ、これを有効にしてください。
クライアントは、close()メソッドの呼び出しに失敗した場合、Connectionオブジェクトを放置する可能性があります。 呼び出し元が省略したとしても、最終的にはこのオブジェクトはガベージコレクションで回収され、Connectionを閉ざすfinalize()が呼び出されます。 ファイナライザの使用は間に合わせの手段に過ぎません。 開発者がソースにおけるこうした漏れを検出し修正できるようにlogUnclosedConnections URL パラメータが追加されました。 これは、Connectionを開くたびにスタックトレースを保管し、finalize()メソッドが閉じる操作を行うことなく呼び出された場合に、そのスタックトレースをログに残します。
サーバサイドの準備済み文を使用するように切り替える前に必要なPreparedStatementの実行数を決定します。 デフォルトは5で、サーバサイドの準備済み文を使用し、1つのPreparedStatementオブジェクトで5つの実行できることを意味します。 サーバサイドの準備済み文に関する詳細はサーバ準備済み文項を参照してください。
データベース接続の確立を待機する期間を指定します。 このタイムアウトは秒単位で指定します。
setString()を使用してバインディングPreparedStatementパラメータが設定される時に使用される型を指定します。 stringtypeがvarcharに設定されている場合(デフォルト)、このパラメータはvarchar型のパラメータとしてサーバに送信されます。 stringtypeがunspecifiedに設定されている場合、パラメータは型指定のない値としてサーバに送信され、サーバは適切な型の推測を行います。 実際に複数種類の型になるパラメータを設定するためにsetString()を使用する既存のアプリケーションが存在し、setInt()などの適切なメソッドを使用するようにこのアプリケーションを変更することができない場合に有用です。