サーチ…


前書き

Javaからのリレーショナルデータベースを使用するAPIはJDBCです。

このAPIはJDBCドライバによって実装されています。

それを使用するには、ドライバを含むJARファイルをJAVAクラスパスに配置します。

このドキュメントでは、JDBCドライバを使用してデータベースに接続する方法のサンプルを示します。

備考

JDBC URL

JDBC URLは、次のいずれかの形式を取ることができます。

  • jdbc:postgresql:// host [: port ]/[ database ][ parameters ]

    hostデフォルトはlocalhostportは5432です。
    hostがIPv6アドレスの場合は、角括弧で囲む必要があります。
    デフォルトのデータベース名は、接続するユーザーの名前と同じです。

    フェールオーバーを実装するには、複数のhost [: port ]エントリをカンマで区切ってhost [: port ]することができます。
    接続が成功するまで順番に試行されます。

  • jdbc:postgresql: database [ parameters ]

  • jdbc:postgresql:/[ parameters ]

    これらの形式は、 localhostへの接続用です。

parameterskey [= value ]ペアのリストで、先頭は? &で区切られています。 valueがない場合はtrueとみなされtrue

例:

jdbc:postgresql://localhost/test?user=fred&password=secret&ssl&sslfactory=org.postgresql.ssl.NonValidatingFactory

参考文献

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();


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow