JavaからJDBCでPostgreSQLにアクセス(コネクション取得)
JavaからJDBC経由でPostgreSQLにアクセスします。JDBCを入れるところからやります。開発環境はEclipseを使います。
PostgreSQLのインストール~テーブル作成は前までの章を参照して下さい。
JDBCのダウンロードはスタックビルダから行えます。
Windowsのスタートメニューからスタックビルダを起動して下さい。

ここからスタックビルダの作業に入りますが、操作説明は別の場所に書いてあるので、そちらを参考にして下さい。
これでスタックビルダでJDBCのJarを入れた場合、
C:\Program Files (x86)\PostgreSQL\pgJDBC か C:\Program Files\PostgreSQL\pgJDBC に入れていると
思われるので、入れたか忘れたら、ここらへんのフォルダを確認して下さい。

次にEclipseでJavaプロジェクトを作成し、以下のようなJavaソースを書きます。
package javaPosgre;
import java.sql.Connection;
import java.sql.DriverManager;
public class Posgre1 {
public static void main(String[] args) {
Connection conn = null;
try {
Class.forName("org.postgresql.Driver");
conn = DriverManager.getConnection("jdbc:postgresql://localhost:5432/DB", "USER", "PASSWORD");
conn.close();
System.out.println("OK");
} catch (Exception e) {
e.printStackTrace();
System.out.println("NG");
}
}
}
上記の赤い部分は自分で書き換えて下さい。 localhost | PostgreSQLのサーバ |
5432 | ポート |
DB | データベース名 |
USER | ユーザ |
PASSWORD | パスワード |
ここらへんの情報はパスワード以外はスタートメニューから psql を起動したときに確認できます。
psqlはこちらをご参照下さい
コンパイルは上記だけで通りますが、実行するためにはJDBCのJarをライブラリに追加する必要があります。
プロジェクトを右クリックしてBuild Path → Add External Archivesを選択します。

ファイル選択ダイアログが開かれるので、JDBCのフォルダに行き、postgresql-9.4-1204.jdbc4.jar を選択します。

追加できると Referenced Libraries に追加したJarが表示されます

それでは実行しましょう。実行に成功すると Console に OK と表示されます。

失敗パターン① JDBCのJarを参照していない。
コンソールに以下の様なメッセージが出ます。これが出たら上に書いたようにJDBCのJARをビルドパスから外部JARを追加して下さい。
java.lang.ClassNotFoundException: org.postgresql.Driver
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at javaPosgre.Posgre1.main(Posgre1.java:10)
NG
失敗パターン② PostgreSQLの接続文字が誤っている
コンソールに以下の様なメッセージが出ます。そのままやったら文字化けしてしまいました。
org.postgresql.util.PSQLException: FATAL: ?f?[?^?x?[?X"postgresd"??????????????
at org.postgresql.core.v3.ConnectionFactoryImpl.readStartupMessages(ConnectionFactoryImpl.java:691)
at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:207)
at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:65)
at org.postgresql.jdbc2.AbstractJdbc2Connection.<init>(AbstractJdbc2Connection.java:156)
at org.postgresql.jdbc3.AbstractJdbc3Connection.<init>(AbstractJdbc3Connection.java:35)
at org.postgresql.jdbc3g.AbstractJdbc3gConnection.<init>(AbstractJdbc3gConnection.java:22)
at org.postgresql.jdbc4.AbstractJdbc4Connection.<init>(AbstractJdbc4Connection.java:47)
at org.postgresql.jdbc4.Jdbc4Connection.<init>(Jdbc4Connection.java:30)
at org.postgresql.Driver.makeConnection(Driver.java:414)
at org.postgresql.Driver.connect(Driver.java:282)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at javaPosgre.Posgre1.main(Posgre1.java:11)
NG
PostgreSQLのエラーログ設定がデフォルトで日本語になっていたので、英語で出力するように直します。 データフォルダ直下に postgresql.conf というファイルがあるので、この中の lc_messages を'C'に設定します。
設定変更
#lc_messages = 'Japanese_Japan.932' # locale for system error message
lc_messages = 'C'
設定変更後は以下のように英語でメッセージが出力されるようになりました。
今回はDB名をわざと間違えてみました。
org.postgresql.util.PSQLException: FATAL: database "postgresd" does not exist
at org.postgresql.core.v3.ConnectionFactoryImpl.readStartupMessages(ConnectionFactoryImpl.java:691)
at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:207)
at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:65)
at org.postgresql.jdbc2.AbstractJdbc2Connection.(AbstractJdbc2Connection.java:156)
at org.postgresql.jdbc3.AbstractJdbc3Connection.(AbstractJdbc3Connection.java:35)
at org.postgresql.jdbc3g.AbstractJdbc3gConnection.(AbstractJdbc3gConnection.java:22)
at org.postgresql.jdbc4.AbstractJdbc4Connection.(AbstractJdbc4Connection.java:47)
at org.postgresql.jdbc4.Jdbc4Connection.(Jdbc4Connection.java:30)
at org.postgresql.Driver.makeConnection(Driver.java:414)
at org.postgresql.Driver.connect(Driver.java:282)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at javaPosgre.Posgre1.main(Posgre1.java:11)
NG
ユーザーを間違えた時のエラー(パスワードも同じ感じでした)
org.postgresql.util.PSQLException: FATAL: password authentication failed for user "postgresX"
at org.postgresql.core.v3.ConnectionFactoryImpl.doAuthentication(ConnectionFactoryImpl.java:427)
at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:203)
at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:65)
at org.postgresql.jdbc2.AbstractJdbc2Connection.<init>(AbstractJdbc2Connection.java:156)
at org.postgresql.jdbc3.AbstractJdbc3Connection.<init>(AbstractJdbc3Connection.java:35)
at org.postgresql.jdbc3g.AbstractJdbc3gConnection.<init>(AbstractJdbc3gConnection.java:22)
at org.postgresql.jdbc4.AbstractJdbc4Connection.<init>(AbstractJdbc4Connection.java:47)
at org.postgresql.jdbc4.Jdbc4Connection.<init>(Jdbc4Connection.java:30)
at org.postgresql.Driver.makeConnection(Driver.java:414)
at org.postgresql.Driver.connect(Driver.java:282)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at javaPosgre.Posgre1.main(Posgre1.java:11)
NG
データベース名やユーザを確認する場合、スタートメニューから psql を起動してEnterキーを押していくと、これらの情報が見れます。
psqlはこちらをご参照下さい
ページのトップへ戻る