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.JavaでPostgresql接続時エラーと解決策
(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.JavaとPostgresqlのSQL周りのエラー
(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