postgreSQLのプログラミングI/F (JAVA篇)
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