- PR -

修正:JAVAからデータベースへのアクセス

投稿者投稿内容
想馬
大ベテラン
会議室デビュー日: 2003/05/29
投稿数: 245
お住まい・勤務地: 神奈川・東京
投稿日時: 2005-09-15 11:53
引用:

インギさんの書き込み (2005-09-15 11:51) より:
>クラスパスの区切り文字がコロン)になってますけど、;(セミコロン)の間違いですよね?
セミコロンで区切るのは Windows の場合ですね。他の大抵の OS ではコロンで区切ります。今回の場合はたぶん問題ないかと思います。n



そうだったんですか。すみません、知りませんでした。
説明ありがとうございます。
tk919
会議室デビュー日: 2005/09/03
投稿数: 13
投稿日時: 2005-09-15 11:55
インギさん

幾度もご変更ありがとうございます。

>postgresql ユーザに切り替えた後、HelloWorldJDBCPostgreSQL.class は
>カレントディレクトリに配置されていますか?

はい。こちらもカレントディレクトリに配置しております↓

bash-2.05a$ cd
bash-2.05a$ pwd
/var/lib/pgsql
bash-2.05a$ ls
HelloWorldJDBCPostgreSQL.class backups data initdb.i18n
bash-2.05a$ java HelloWorldJDBCPostgreSQL
A connection error has occurred: FATAL: Password authentication failed
for user "postgres"

at org.postgresql.jdbc1.AbstractJdbc1Connection.openConnection(AbstractJ
dbc1Connection.java:196)
at org.postgresql.Driver.connect(Driver.java:120)
at java.sql.DriverManager.getConnection(DriverManager.java:512)
at java.sql.DriverManager.getConnection(DriverManager.java:171)
at HelloWorldJDBCPostgreSQL.main(HelloWorldJDBCPostgreSQL.java:14)
ももんが
会議室デビュー日: 2005/02/02
投稿数: 4
投稿日時: 2005-09-15 12:03
スタックトレースから判断すると、やはりインギさんのおっしゃる通り、
パスワードが適切に設定されていないものと思います。
ここでいうパスワードとは、PostgresDBにログインするためのパスワードですが、
それも設定されていないのですか?
takashi
ベテラン
会議室デビュー日: 2004/02/12
投稿数: 79
お住まい・勤務地: 東京
投稿日時: 2005-09-15 12:11
postgresユーザに変更する時に
su - postgres
(“−”追加)でどうでしょうか?こうするとpostgresユーザの環境変数が設定されるとおもうのですが。
その上でCLASSPATHを設定してあげると。

↓ダメだった場合
つまりはpostgresユーザでパスワードなしでログインできることをプログラム中でもやりたいと思うのですが、試しに明示的にパスワード有りのユーザを作成してみてはどうでしょうか?
以下が参考になると思います。
http://tomo.ac/goodstream/database/postgresql/linux/tips/userauth2.htm
tk919
会議室デビュー日: 2005/09/03
投稿数: 13
投稿日時: 2005-09-15 12:12
yoshiさん

ご返答誠にありがとうございます。

>ここでいうパスワードとは、PostgresDBにログインするためのパスワードですが、
>それも設定されていないのですか?

はい、そのつもりですが。。通常PostgreSQLにログインする流れは以下の通りです↓

[root@localhost usr]# /etc/rc.d/init.d/postgresql start 
Starting postgresql service: [ OK ]
[root@localhost usr]# su - postgres    ←rootからpostgresにユーザ変更
bash-2.05a$ psql hellodb
Welcome to psql 7.3.3, the PostgreSQL interactive terminal.

Type: \copyright for distribution terms
\h for help with SQL commands
\? for help on internal slash commands
\g or terminate with semicolon to execute query
\q to quit

hellodb=# \d
List of relations
Schema | Name | Type | Owner
--------+-------------------+-------+----------
public | hello_world_table | table | postgres
(1 row)
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-09-15 12:45
ん、最初と現象がちがいますよね?
最初(2005-09-15 11:00)はNoClassDefFoundError (クラスがみつからない)ですが、今回(2005-09-15 11:55)はパスワード認証が失敗した旨のエラーがでています。
やはり最初はクラスがカレントディレクトリに配置されていなかったのではないでしょうか。


とりあえず postgres ユーザでのアプリケーションの起動には成功したようなので、再度Driver.connect に渡しているプロパティに正しいパスワード、ユーザが設定されているか確認しましょう。
psql ではどのユーザから起動しているか確認しているのでパスワードを別途入力する必要ないかもしれません。
が、JDBC から接続する場合はプログラムを起動しているユーザ情報は伝わらないので、Properties にセットしておく必要があるからです。
逆に言えば、接続プロパティさえ設定しておけば root からでも postgres ユーザとして接続することも可能です。

[ メッセージ編集済み 編集者: インギ 編集日時 2005-09-15 12:54 ]
ちょま吉
大ベテラン
会議室デビュー日: 2004/08/04
投稿数: 112
投稿日時: 2005-09-15 12:54
インギさんの仰るとおりと思います。
PostgreSQLでパスワード認証を行っていると思われます。
だとするとOSのユーザなどは無関係です。
PostgreSQLでalter user(確か、、、)でパスワードを一時的に設定して接続してみては如何でしょうか?
または、ネットでダウンロードできるJavaのツールなどで本当に接続できるか試すとか。

方法はいろいろありますが、
結局、パスワードが本当に空なのか?ということを確認すべきと思います。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-09-15 12:58
参考になりそうなリンクを。
・本家のドキュメント
http://jdbc.postgresql.org/doc.html
・JavaでHello World > プロパティファイル編
http://www.hellohiro.com/property.htm

スキルアップ/キャリアアップ(JOB@IT)