2011年6月25日土曜日

PostgreSQL9.0 Javaプログラミング

PostgreSQL を使って, システムを構築したいなぁと思い立って, 開発環境を構築してみました。

環境 Windows7 64bit
         PostgreSQL 9.0

PostgreSQLのインストールに関してましては, 省略いたします。
Window環境であれば, インストーラーで簡単にインストール可能です。

今回の手順
1.   テーブルの準備
2.   JDBCドライバ(jar)の取得
3.  サンプルコードの作成


1.  とりあえず, 対象テーブルを用意します
Windows 用GUI ツール PgAdminⅢを利用して,
今回用意したテーブルは上のようなテーブルです。
SQLで書くとこんな感じ

CREATE TABLE member
(
  id integer NOT NULL,
  "name" text,
  rank integer,
  CONSTRAINT member_pkey PRIMARY KEY (id),
  CONSTRAINT rank_check CHECK (rank > 0)
)
WITH (
  OIDS=FALSE
);
ALTER TABLE member OWNER TO postgres;


データは1件のみです。

2. JDBCドライバ(jar)の取得
Windows用インストーラーには, スタックビルダという追加コンポーネントのインストーラーが
付属しており, その中にJDBCがあるわけですが, それでインストールすると旧バージョンが
インストールされるようなので, 以下のWebサイトから最新版を持ってきます。
http://jdbc.postgresql.org/download.html
この中で, JDBC4のバージョンを選択します。
バージョンは, JDKの違いです。  最新であれば JDBC4でいけます。




3. サンプルコードの作成
postgresql-9.0-801.jdbc4.jar を Java Project のパスに通します。

プログラムは以下の通りです。
・AbstractDBModule.java     :   DBセットアップ用の, Abstractクラス

package com.atmarkplant.postgre.db;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;

public abstract class AbstractDBModule
{
String host; // Host name

String port; // Port number

String dbName; // Data base name

String roleName; // Role(User?)

String password; // Password

String url; // JDBC path

Connection conn;

Properties prop;

abstract void setURL ( String url );

public AbstractDBModule( String host, String port, String dbName )
{
this.host = host;
this.port = port;
this.dbName = dbName;
this.prop = new Properties();
}

abstract public void initialize() throws ClassNotFoundException, SQLException;

public Connection getConnection( )
{
return conn;
}

public void close( Connection con )
{
try
{
con.close();
}
catch ( SQLException oops )
{
oops.printStackTrace();
}
}

public void commit() throws SQLException
{
conn.commit();
}
}


・PostgreSetup.java    : Postgre セットアップ用のクラス

package com.atmarkplant.postgre.db;

import java.sql.DriverManager;
import java.sql.SQLException;

public class PostgreSetup extends AbstractDBModule
{
private static String DRIVERNAME = "org.postgresql.Driver";

private static String DBPREFIX = "jdbc:postgresql://";

private static String USER = "user";

private static String PASSWORD = "password";

public PostgreSetup(String host, String port, String dbName)
{
super( host, port, dbName );
setURL( DBPREFIX + host + ":" + port + "/" + dbName );
}

public PostgreSetup( String host,
String port,
String dbName,
String user,
String pasword)
{
this(host, port, dbName);
prop.setProperty( USER, user );
prop.setProperty( PASSWORD, pasword );
}

@Override
void setURL(String url)
{
this.url = url;
}

@Override
public void initialize() throws ClassNotFoundException, SQLException
{
Class.forName( DRIVERNAME );
conn = DriverManager.getConnection( url, prop );
conn.setAutoCommit( false );
}
}

・PostgreTest.java テスト用のプログラム


package com.atmarkplant.db.test;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import com.atmarkplant.postgre.db.PostgreSetup;

public class PostgreTest
{
public static void main(String[] args)
{
PostgreSetup setup = new PostgreSetup("localhost",
"5432",     //   ポート番号を入れる
"AKB",      //  データベース名を入れる
"user",         //  ユーザ名を入れる
"xxxxx");     // パスワードを入れる
Connection conn = null;
try
{
setup.initialize();
conn = setup.getConnection();

PreparedStatement stmt = conn.prepareStatement( "SELECT * FROM member" );

ResultSet results = stmt.executeQuery();

while ( results.next() )
{
System.out.println("Name:" + results.getString("name"));
}
results.close();
stmt.close();
}
catch ( ClassNotFoundException oops )
{
oops.printStackTrace();
}
catch ( SQLException oops )
{
oops.printStackTrace();
}
finally
{
if ( conn != null )
{
setup.close( conn );
}

}

}
}


ユーザ名, パスワードはセキュリティのため, 適当に入れています。
各個人の環境に合わせて書いてください。

サンプル実行結果)
Name:前田敦子

0 件のコメント:

コメントを投稿