postgresql
JavaからPostgreSQLに接続する
サーチ…
前書き
Javaからのリレーショナルデータベースを使用するAPIはJDBCです。
このAPIはJDBCドライバによって実装されています。
それを使用するには、ドライバを含むJARファイルをJAVAクラスパスに配置します。
このドキュメントでは、JDBCドライバを使用してデータベースに接続する方法のサンプルを示します。
備考
JDBC URL
JDBC URLは、次のいずれかの形式を取ることができます。
jdbc:postgresql:// host [: port ]/[ database ][ parameters ]
host
デフォルトはlocalhost
、port
は5432です。
host
がIPv6アドレスの場合は、角括弧で囲む必要があります。
デフォルトのデータベース名は、接続するユーザーの名前と同じです。フェールオーバーを実装するには、複数の
host [: port ]
エントリをカンマで区切ってhost [: port ]
することができます。
接続が成功するまで順番に試行されます。jdbc:postgresql: database [ parameters ]
jdbc:postgresql:/[ parameters ]
これらの形式は、
localhost
への接続用です。
parameters
はkey [= value ]
ペアのリストで、先頭は?
&
で区切られています。 value
がない場合はtrue
とみなされtrue
。
例:
jdbc:postgresql://localhost/test?user=fred&password=secret&ssl&sslfactory=org.postgresql.ssl.NonValidatingFactory
参考文献
- JDBC仕様: http : //download.oracle.com/otndocs/jcp/jdbc-4_2-mrel2-eval-spec/
- PostgreSQL JDBCドライバ: https : //jdbc.postgresql.org/
- PostgreSQL JDBCドライバのドキュメント: https : //jdbc.postgresql.org/documentation/head/index.html
java.sql.DriverManagerを使用した接続
これは接続する最も簡単な方法です。
まず、使用するクラスを知るためにドライバをjava.sql.DriverManager
に登録する必要があります。
これは、ドライバクラスを通常はjava.lang.Class.forname( <driver class name> )
ロードすることによって行われjava.lang.Class.forname( <driver class name> )
。
/**
* Connect to a PostgreSQL database.
* @param url the JDBC URL to connect to; must start with "jdbc:postgresql:"
* @param user the username for the connection
* @param password the password for the connection
* @return a connection object for the established connection
* @throws ClassNotFoundException if the driver class cannot be found on the Java class path
* @throws java.sql.SQLException if the connection to the database fails
*/
private static java.sql.Connection connect(String url, String user, String password)
throws ClassNotFoundException, java.sql.SQLException
{
/*
* Register the PostgreSQL JDBC driver.
* This may throw a ClassNotFoundException.
*/
Class.forName("org.postgresql.Driver");
/*
* Tell the driver manager to connect to the database specified with the URL.
* This may throw an SQLException.
*/
return java.sql.DriverManager.getConnection(url, user, password);
}
そのユーザーとパスワードをJDBC URLに含めることはできません。その場合、 getConnection
メソッド呼び出しでユーザーとパスワードを指定する必要はありません。
java.sql.DriverManagerとの接続とプロパティ
URLや別のパラメータにuserやpasswordなどの接続パラメータ(完全なリストを参照 )を指定する代わりに、それらをjava.util.Properties
オブジェクトにパックすることができます。
/**
* Connect to a PostgreSQL database.
* @param url the JDBC URL to connect to. Must start with "jdbc:postgresql:"
* @param user the username for the connection
* @param password the password for the connection
* @return a connection object for the established connection
* @throws ClassNotFoundException if the driver class cannot be found on the Java class path
* @throws java.sql.SQLException if the connection to the database fails
*/
private static java.sql.Connection connect(String url, String user, String password)
throws ClassNotFoundException, java.sql.SQLException
{
/*
* Register the PostgreSQL JDBC driver.
* This may throw a ClassNotFoundException.
*/
Class.forName("org.postgresql.Driver");
java.util.Properties props = new java.util.Properties();
props.setProperty("user", user);
props.setProperty("password", password);
/* don't use server prepared statements */
props.setProperty("prepareThreshold", "0");
/*
* Tell the driver manager to connect to the database specified with the URL.
* This may throw an SQLException.
*/
return java.sql.DriverManager.getConnection(url, props);
}
接続プールを使用したjavax.sql.DataSourceとの接続
アプリケーションサーバーコンテナでJNDIとともにjavax.sql.DataSource
を使用するのが一般的です。データソースを名前で登録し、接続が必要なときはいつでも参照することができます。
これは、データソースの仕組みを示すコードです。
/**
* Create a data source with connection pool for PostgreSQL connections
* @param url the JDBC URL to connect to. Must start with "jdbc:postgresql:"
* @param user the username for the connection
* @param password the password for the connection
* @return a data source with the correct properties set
*/
private static javax.sql.DataSource createDataSource(String url, String user, String password)
{
/* use a data source with connection pooling */
org.postgresql.ds.PGPoolingDataSource ds = new org.postgresql.ds.PGPoolingDataSource();
ds.setUrl(url);
ds.setUser(user);
ds.setPassword(password);
/* the connection pool will have 10 to 20 connections */
ds.setInitialConnections(10);
ds.setMaxConnections(20);
/* use SSL connections without checking server certificate */
ds.setSslMode("require");
ds.setSslfactory("org.postgresql.ssl.NonValidatingFactory");
return ds;
}
この関数を呼び出してデータソースを作成したら、次のように使用します。
/* get a connection from the connection pool */
java.sql.Connection conn = ds.getConnection();
/* do some work */
/* hand the connection back to the pool - it will not be closed */
conn.close();