javaからpostgresqlに接続する

とりあえずのメモですなと。

 

1.インストール手順(Windows10 64bit)

(1)「postgresql-X.X.X-X-windows.exeを実行

・Instration Directory→インストールされるディレクト

C:Program Files (x86)PostgreSQLX.X

・Data Directory→実際に使ったデータの保存先

C:Program Files (x86)PostgreSQLX.Xdata

・Password postgres

・Port 5432

・Locale Japanesejapan

 

2.デバック・動作確認http://si.comp.ae.keio.ac.jp/web_app_dev_material/simple/dev_db/dev_db_java/index.html

 

3.JavaPostgresql接続時エラーと解決策

(1)エラーの文字化け

■事象

エラー内容が文字化けしてしまう。

■解決策

postgresql.confファイルを開く

②lc_messages = 'Japanese_Japan.932'をコメントアウト

③lc_messages = 'C'を追加

PostgreSQL を再起動する

 ・ [コントロールパネル]-[管理ツール]-[サービス] を選択

 ・「postgresql-x64-X.X」 を右クリックし「再起動」を選択

<https://blogs.yahoo.co.jp/dk521123/33325738.html>

 

(2)パスワード権限の失敗

■事象

Class.forName("org.postgresql.Driver");Connection connection =   

DriverManager.getConnection("jdbc:postgresql://localhost/postgres", "postgres", "");

Statement statement = connection.createStatement();

■解決策

Class.forName("org.postgresql.Driver");Connection connection =  

DriverManager.getConnection("jdbc:postgresql://localhost/postgres", "postgres",

"postgres");

Statement statement = connection.createStatement();

<https://blogs.yahoo.co.jp/dk521123/33327164.html>

 

(3)デフォルトのResultSetが巻き戻し不可

■事象

Class.forName("org.postgresql.Driver");Connection connection =

DriverManager.getConnection("jdbc:postgresql://localhost/postgres", "postgres",

"postgres");Statement statement = connection.createStatement();

-----------------------------------

【コンソール出力】

org.postgresql.util.PSQLException: Operation requires a scrollable ResultSet, but this ResultSet is FORWARD_ONLY. at org.postgresql.jdbc2.AbstractJdbc2ResultSet.checkScrollable(AbstractJdbc2ResultSet.java:236)

at org.postgresql.jdbc2.AbstractJdbc2ResultSet.first(AbstractJdbc2ResultSet.java:318)

at test.UserDB.executeSelect(UserDB.java:117)

at test.UserDB.execute(UserDB.java:100)

at test.UserDB.main(UserDB.java:31)

-----------------------------------

■解決策

Class.forName("org.postgresql.Driver");Connection connection =  

DriverManager.getConnection("jdbc:postgresql://localhost/postgres", "postgres",

"postgres");

Statement statement =

connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE ,

ResultSet.CONCUR_READ_ONLY);

-----------------------------------

【コンソール出力】

id: 1, name: 1, password: 1

id: 2, name: 2, password: 2

-----------------------------------

 

3.JavaPostgresqlSQL周りのエラー

(1)id列がnot null制約違反と言われる。

■事象

ERROR: null value in column "id" violates not-null constraint Detail: Failing row contains (null, `1 , 1 , 2018-08-27, null).

■解決策

対象テーブルのカラムidにserialを明示的に設定する。(そうしないと、暗黙的にnullが設定されるらしい。)
create table tablename (
colname serial
);

■備考
・まず、postgresqlのserialとは、いわゆる、連番の自動採番のこと。
サロゲートキー(人工キー)です。連番かつ一意ということ。
 http://argius.hatenablog.jp/entry/20120607/1339077696
・serial指定したカラムはinsert文発行時に自動採番される。
 http://developpp.blog.jp/archives/8224244.html

 

(2)serial指定したカラムがResultSetに見つからないと言われる。

■事象

The column name id was not found in this ResultSet.

■解決策
serial指定してるんだから無視してくれよって感じ。
nextval関数を指定…って無理か。。。諦めました。とりあえず、自動採番はやめ。
https://qiita.com/5zm/items/da82cec73e097d2a97d0

再開するなら、ここからだけど、もうこの事象で疲れ果てたので、いったん諦めます。。。。。。
http://si.comp.ae.keio.ac.jp/web_app_dev_material/simple/dev_servlet/dev_servlet_prac/index.html