- ベストアンサー
データベースへのアクセスができないエラーが発生する
- データベースへのアクセスができないエラーが発生し、コネクションの取得ができません。
- エラーの解決方法として、接続情報の修正やファイアウォールの解除を試しましたが、変化はありませんでした。
- postgreSQLのバージョンは8.4を使用しており、プラットフォームはAndroidです。JDBCを使用しているため、問題はないと考えています。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
通りすがりです。 確認を実施していただいてありがとうございます。 さて、当方の環境として確認しましたのは、以下のようになっております。 1.windows版 postgres8.3 2.linux版 postgres8.3 postgres.confの中身を確認しましたがいずれも、tcpip_soketなるパラメータ は存在しませんでした。ただググってみますと、7.4.5の時代にはあったようです。 なお、接続のために設定した内容については以下のようにしました。 1.windows版 特になし 2.linux版(SentOS5.1) postgres.conf listen_addresses=* '受付IPアドレスを追加する。(この場合無条件に受付) port=5432 '規定値 max_connections=xxx '規定値 100 データベースサーバに同時接続する最大数 unix_socket_permissions 規定値 0777 ユーザとグループのみ接続を許可すに変更 pg_hba.conf host all all 192.168.1.x/32 password 'メンテナンス対象クライアントのアドレスを設定する。なお接続はパスワードを要求する。 以上の設定で接続が確認されました。 接続の確認は、LAN上のwindowsPCから、pgadminにより確認。 phadminにより接続確認ができた場合には、あとはプログラムの問題なので、そこで切り分け。 といったぐらいです。 クライアント側からの接続方法も言語、バージョンによりまたは、記述ミス等もあると思いますので 接続できない場合には、一応疑って色々と試してみます。 なお、postgress8.4のマニュアルにも、特にTCPIP接続については 基本有効となっており、オプションとしてsslの設定が必要云々を記述されております。 おそらく、昔、この記述があったが最新版において無くなったのではないでしょうか? そちらの環境で、pgadminによる(その他接続方法でもかまいません)接続試験はご確認された のでしょうか? 参考までに、接続に関するパラメータの説明は、 http://postgresql.jp/document/current/html/runtime-config-connection.html 項 18.3.1 を参照ください。 8.4版のマニュアルです。
その他の回答 (1)
- ToOrisugaru
- ベストアンサー率28% (80/280)
はじめまして、通りすがり と申します。 わたくし、Androidは知らないのですが、上記接続文字列のところで Connection con = DriverManager.getConnection ("jdbc:postgresql://127.0.0.1:5432/db_test","postgres","PASS"); 3つのパラメータで渡しているように見えるのですが、ここはひとつの文字列として 渡さなければならないのではないでしょうか?その他接続方法を見ても、3つのパラメータとして 渡してるものは、見当たらないのですが.. OLE DBプロバイダ Provider=PostgreSQL OLE DB Provider;Data Source=localhost;Location= [データベース];User ID=[ユーザID];Password=[パスワード] ↑ ひとつの文字列として渡してる。パラメータ区切りには、”;”を使用 ODBCプロバイダ Driver={PostgreSQL};Server=localhost;Database=[データベース];UID=[ユ ーザID];PWD=[パスワード];Port=5432; ↑ ひとつの文字列として渡してる。パラメータ区切りには、”;”を使用 ODBCもoledbと同様 npgsql "Server=127.0.0.1;Port=5432;UserId=joe;Password=secret;Database=joeda ta;"); ↑ ひとつの文字列として渡してる。パラメータ区切りには、”;”を使用 npgsqlもoledbと同様 付属のサンプルより
補足
ご回答ありがとうございます。 コネクションの取得関数.getConnectionですが、 Connection java.sql.DriverManager.getConnection(String url, String user, String password) throws SQLException 上記のように3つの引数を必要としているため、現在の記述で問題ないと考えております。 また、原文の内容に追加して質問なのですが、 >あと、tcpipによる接続を許可しなければならないため、postgresql.conf を編集し、 >tcpip_socket=false を >tcpip_socket=true に変える >という記述がありましたが、 >postgresql.conf に tcpip_socket という項目はみつかりませんでした。 以上のtcpip_socketという項目の設定がどうしても必要みたいなのですが、 これは本当にpostgresql.confの中に存在するのでしょうか。 その他のファイルに記述されているという可能性はないのでしょうか。
お礼
ToOrisugaru様 環境まで構築していただいて本当に感謝しております。 tcpip_socketの件ですが、postgreSQLのバージョンが8になってから 項目名がガラリと変わったそうです。 例: tcpip_socket → listen_addresses 以下のサイトに詳細が乗っておりました。 http://journal.mycom.co.jp/special/2004/postgres8/003.html このlisten_addressesを変更することにより、無事接続が確認できました。 ありがとうございました。