jdbcドライバはapt-get install postgresql-jdbcでインストールできた。
$ rpm -q -l postgresql-jdbc
/usr/share/java/pg74.1jdbc1.jar
/usr/share/java/pg74.1jdbc2.jar
/usr/share/java/pg74.1jdbc2ee.jar
/usr/share/java/pg74.1jdbc3.jar
ということから、ここのjdbc2にクラスパスをとおせばよい。
ドライバクラスは「org.postgresql.Driver」とする。
接続urlは「jdbc:postgresql:<>」とする。
import java.util.*;
import java.sql.*;
public class TestJava {
public static void main( final String[] argv ) throws Exception {
Class.forName( "org.postgresql.Driver" );
final Properties prop = new Properties();
prop.setProperty( "user", "seraphy" );
prop.setProperty( "password", "********" );
final String url = "jdbc:postgresql:<<DBNAME>>";
final Connection con = DriverManager.getConnection( url, prop );
try{
....
}
finally {
con.close();
}
}
}
で、コンパイルと実行。
ソース上にはorg.postgresql.Driverクラスへの参照はないのでコンパイル時にJDBCクラスパスをとおす必要は無いが、実行時にはクラスパス上にみつからないとClassNotFoundExceptionになる。
javac *.java
java -cp .:/usr/share/java/pg74.1jdbc2.jar TestJava
しかし、これだけではだめだった。
postgresqlの設定をかえないと動作しない。
既定ではtcpipによる接続を許可しないので、jdbcからアクセスできない。
Exception in thread "main" org.postgresql.util.PSQLException: Connection refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.
などというエラーとなる。
tcpipで接続できるようにするには、/var/lib/pgsql/data/postgresql.conf を編集し、tcpip_socket=true にする。
これだけではtcpipによるアクセスはできるようになるが、接続許可リストにないので拒否される。
Exception in thread "main" org.postgresql.util.PSQLException: A connection error has occurred: org.postgresql.util.PSQLException: FATAL: no pg_hba.conf entry for host "127.0.0.1", user "seraphy", database "postgres1", SSL off
接続許可をあたえるには、/var/lib/pgsql/data/pg_hba.conf を編集し、接続許可を追記する。
host all all 127.0.0.1 255.255.255.255 trust
これでローカルホストからのTCP/IP接続が許可される。
あとはpostgresqlを再起動すればjdbcでpostgreSQLのデーターベースにアクセスできるようになる。
/etc/rc.d/init.d/postgresql restart