PostgreSQLのDataSourceを使った接続

PostgreSQL-8.1.3 + Tomcat-5.0.28 + J2SE Development Kit 5.0 Update 6

  • Jarファイルのコピー

PostgreSQLjdbc以下にある、
postgresql-8.1-405.jdbc.jar

$TOMCAT_HOME\common\lib
にコピー。

  • XMLファイルの編集

$TOMCAT_HOME\conf\Catarina\localhost
以下にある
(Context名).xml
からまでの間に、以下を追加する。

  <Resource auth="Container" name="jdbc/mydb" type="javax.sql.DataSource"/>
  <ResourceParams name="jdbc/mydb">
    <parameter>
      <name>factory</name>
      <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
    </parameter>
    <parameter>
      <name>url</name>
      <value>jdbc:postgresql://localhost:5432/mydb</value>
    </parameter>
    <parameter>
      <name>driverClassName</name>
      <value>org.postgresql.Driver</value>
    </parameter>
    <parameter>
      <name>username</name>
      <value>username</value>
    </parameter>
    <parameter>
      <name>password</name>
      <value>password</value>
    </parameter>
    <parameter>
      <name>maxIdle</name>
      <value>10</value>
    </parameter>
    <parameter>
      <name>maxActive</name>
      <value>10</value>
    </parameter>
    <parameter>
      <name>maxWait</name>
      <value>20000</value>
    </parameter>
    <parameter>
      <name>removeAbandoned</name>
      <value>true</value>
    </parameter>
    <parameter>
      <name>logAbandoned</name>
      <value>true</value>
    </parameter>
    <parameter>
      <name>removeAbandonedTimeout</name>
      <value>600</value>
    </parameter>
  </ResourceParams>
  • データソースの登録

Tomcatのトップ画面で、
Tomcat Administration
のリンクから管理画面にログインする。
左側の
リソース>データソース
をクリック
右側の
データソース>Deta Source Actions>新しいデータソースの作成
を選択し、以下を入力する。

JNDI名 → jdbc/mydb
データソース名 → jdbc:postgresql:mydb
JDBCドライバクラス → org.postgresql.Driver
ユーザ名 → username
パスワード → password
(以下略)

入力ができたら
保存>変更を反映
ボタンを押す。

以下のようにアクセスする。

    Connection conn = null;
    Statement stmt = null;
    ResultSet rs = null;

    try {

        Context ctx = new InitialContext();
        DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/mydb");
        conn = ds.getConnection();

        stmt = conn.createStatement();
        String sql = "SELECT count(*) FROM table";
        rs = stmt.executeQuery(sql);
        if(rs.next()) {
            String count = rs.getString(1);
            System.out.println(count);
        }
        if(rs != null) {
            rs.close();
        }
    } catch (Exception e) {
            e.printStackTrace();
    } finally {
        try {
            if(stmt != null) {
                stmt.close();
            }
            if(conn != null) {
                conn.close();
            }
        } catch (Exception e) {}
    }