[pgsql-jp: 28313] Re: postgresqlとの接続エラー
Tamotsu Ebina
ebina @ pluto.dti.ne.jp
2002年 12月 14日 (土) 02:52:34 JST
> program2 では
> DataBase Connect Failed ClassNotFoundException
> とエラーがでる。
servletの実行ならservletエンジンの指定するライブラリに
postgresql.jar をコピーしておく必要があります。
TomCat なら 各アプリケーションの WEB-INF/lib の下か TomCatの lib
(使用しているservletエンジンを調べてください)
> program3ではNullPointerException が発生しているようです。
>
> いったい、 ドライバのロードエラーなのかDBコネクションの接続エラー
> なのかどちらかよくわかりません。
> エラーを特定するいい方法が御座いましたらご教授お願いいたします。
urlname, user, pwd が正しければ program3自体は正しく動きます。
ただし、どれかが間違っていると、コネクト出来ず、
Statement stmt = con.createStatement();
で con が null なのでNullPointerException が発生します。
このコーディングではコネクトできたか?とチェックの意味で
if (con == null) {
System.out.println("error");
show(req,resp,"error",null);
return;
}
としていますが、コネクトできないときは SQLException が発生しますから
制御はこの if 文へは渡りません。(このチェックは意味が無いので不要です)
次に下で、せっかく try catch しても
System.out.println(rtn_msg); または
e.printStackTrace();
しているだけなので、制御は次へ渡ってしまいます。
一番簡単な方法は、致命的なエラーが発生したら
下記のように ServletException を throw します。
プログラムはそれ以上実行されず、制御はservletエンジンへ戻ります。
} catch ( ClassNotFoundException e) {
e.printStackTrace();
throw new ServletException();
} catch ( SQLException e) {
e.printStackTrace();
throw new ServletException();
} // end of catch
するとブラウザには
javax.servlet.ServletException
at Bookmark2.doPost(Bookmark2.java:51)
と表示され、すぐexception の発生したソースファイルのライン数が分かります。
System.exit(-1);
で抜けてしまうと、ブラウザには「ページを表示できません」としか表示されません
から 通常servletを止める時は ServletException を投げます。
printStackTrace();はブラウザには表示されませんが、servletエンジンの出力、
TomCatなら標準出力に、例えば ユーザIDが違えば。
ava.sql.SQLException: FATAL 1: user "tamo" does not exist
at org.postgresql.Connection.openConnection(Unknown Source)
at org.postgresql.Driver.connect(Unknown Source)
at java.sql.DriverManager.getConnection(DriverManager.java:512)
at java.sql.DriverManager.getConnection(DriverManager.java:171)
at Bookmark2.doPost(Bookmark2.java:38)
と表示されます。
ブラウザの出力だけでなく、こちらも確認しましょう。
なぜコネクトできないかの直接原因はこちらで分かります
いずれにしろJavaの例外処理 try catch thorw を正しく使う必要があります。
海老名
--
office ta.ebina @ po1.iftc.co.jp http://www.iftc.co.jp/
private ebina @ pluto.dti.ne.jp http://www.pluto.dti.ne.jp/~ebina/
[Amateur Radio Station JCG#11007 JA1QKK ] Tamotsu Ebina
> -----------program3----------------------
> try {
> // ドライバクラスをロード
> Class.forName("org.postgresql.Driver"); // PostgreSQLの場合
>
> // データベースへ接続
> con = DriverManager.getConnection(urlname,user,pwd);
> rtn_msg = "DataBase Connect OK";
> if (con == null) {
> System.out.println("error");
> show(req,resp,"error",null);
> return;
> }
> }catch ( ClassNotFoundException e) {
> rtn_msg = "DataBase Connect Failed : " + e;
> System.out.println(rtn_msg);
>
> } // end of catch
> catch ( SQLException e) {
> e.printStackTrace();
>
> } // end of catch
pgsql-jp メーリングリストの案内