以下のサイトを参考にして、JSPからデータベースにアクセスして
ブラウザに表示させようとしています。
http://www.atmarkit.co.jp/fjava/rensai/jsp10/jsp …
実行環境は以下です
OS: Vine Linux 4.1
PostgreSQL: version 8.2.5
Tomcat: version 5.5.25
Java: Java 2 SDK, standard Edition, version 1.5.0_13
ブラウザからjspファイルにアクセスすると次のエラーがでてきます
ーーー エラー文 ーーー
HTTPステータス 500 -
type 例外レポート
メッセージ
説明 The server encountered an internal error () that prevented it from fulfilling this request.
例外
org.apache.jasper.JasperException: Exception in JSP: /dbaccess.jsp:16
13: db.open();
14:
15: // メンバーを取得
16: ResultSet rs = db.getResultSet("select * from member");
17:
18: // メンバー一覧表示用のテーブル
19: String tableHTML = "<table border=1>";
Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:451)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:355)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
原因
javax.servlet.ServletException: ERROR: relation "member" does not exist
(略)org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
原因
org.postgresql.util.PSQLException: ERROR: relation "member" does not exist
org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:1548)
(略)org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
ーーー ここまで ーーー
自分が行った手順なんですが、
1、postgresユーザで'sampledb'というdbを作り、そのなかにmemberという
テーブルを作成し、select * from member; を実行したところテーブル
はありました。
2、MyDBAccess.javaは参考サイトとほぼ同じです。
コンストラクタの設定のところを以下のようにしました。
ーーーーーーーーーーーー
public MyDBAccess() {
driver = "org.postgresql.Driver";
url = "jdbc:postgresql://localhost:5432/sampledb;
user = "postgres";
password = "********";
}
ーーーーーーーーーーーー
コンパイルも通ったので
TOMCAT_HOME/webapps/####/WEB-INF/classes/atmarkitに
クラスファイルを置きました。
3、jspファイルはdbaccess.jspという名前でそのまま使いました。
TOMCAT_HOME/webapps/####/dbaccess.jsp
4、/usr/local/pgsql/data/postgresql.confの
#listen_addresses = 'localhost' を
listen_addresses = '*'
に書き換え、その後に
$ pg_ctl reload としました。
5、ブラウザから
"http://localhost:8080/####/dbaccess.jsp"
にアクセスするとエラーがでました。
例外の部分のエラーはいろいろいじっていると出たり出なかったりですが、
"relation "member" does not exist"というエラーは消えません。
自分でいろいろ調べてみたのですがうまくいかなくて行き詰まってしまいました。
どうか助言や解決策があれば教えてください。
お願いいたします。
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
> org.postgresql.util.PSQLException: ERROR: relation "member" does not exist
エラーから判断するに、JSPの問題ではなくて、データベースの問題ですね。
スキーマがpublicじゃないとかそうゆう問題かもしれないです。
Googleで「relation does not exist postgresql」をキーワードにして検索すると、参考になりそうなページが見つかりますよ。
http://www.google.co.jp/search?q=relation++does+ …
回答ありがとうございます。
スキーマは以下のようにpublicでした
sampledb=# \d
List of relations
Schema | Name | Type | Owner
--------+----------------------+----------+----------
public | member | table | postgres
public | member_member_id_seq | sequence | postgres
エラー文の検索は質問を投稿する前にやってみてはいました。
回答をいただいてもう一度探してみたのですが
やはり参考になりそうなページが見つかりませんでした;;
ブラウザでjspにアクセスしたとき、
ターミナルでデータベースに入っている(?)状態にこちらにも
以下のようにエラー表示されます
sampledb=# ERROR: relation "member" does not exist
STATEMENT: select * from member
LOG: unexpected EOF on client connection
やはりデータベース側の問題なのでしょうか;;
No.2
- 回答日時:
エラーメッセージからして、やはりデータベースもしくはテーブルに何かありそうですね。
「select * from member」というSQLを
「select * from "member"」となるように、つまりテーブル名をクォートで囲む、
というのがあるようなのですが、これは試してみましたでしょうか?
あとは、原因の切り分けとして、
テーブルまたはデータベースを別のものを用意して、それでも同じかどうか
(現在作成したテーブルに問題があるかどうか)
JSPからではなく、JDBCから実行する(Tomcat側の問題があるかどうか)
といったことを確認して、どこに原因があるかを探っていく、というのがトラブル解決の基本なので、
こういったことを試してみてはどうでしょう。
回答ありがとうございます。
返答が遅くなってしまってもうしわけありません。
「select * from "member"」は
jspファイル内の記述ではなくてpostgresのコマンドラインですよね?
postgresのコマンドラインではクォートを付けなくても付けてもテーブルの参照はできました。
jspファイル内の記述もクォートを付けて試してみましたがエラー文が変わり解決しませんでした。そのエラー文なんですがjspファイルにアクセスして何度かリロードするとエラー文の原因の部分があったりなかったりします。これはどう解釈していいかわからず困っています。
jspファイルがコンパイルできないとは出つづけているのでやはり何か別の作業が必要なのではないかと思いました。
恐縮なのですけどJDBCから実行するというのは具体的にどういうことを意味しているのですか?
やりかたが自分ではわかりませんでした。すいません。
No.3
- 回答日時:
>恐縮なのですけどJDBCから実行するというのは具体的にどういうことを意味しているのですか?
すみません。間違った言い方してました。JDBCから実行って当たり前ですね。
JSPではなく、Javaアプリケーションとして実行、ということです。
例えば、
http://www.atmarkit.co.jp/fjava/rensai/jdbc02/jd …
このサイトのような感じです。
TomcatやJSPを使うと、どうしてもサーバの設定などが関係して原因の特定が難しいので、
できるだけシンプルな構成で試して原因を探っていく、ということです。
>jspファイル内の記述もクォートを付けて試してみましたがエラー文が変わり解決しませんでした。
>jspファイルがコンパイルできないとは出つづけているので
う~ん、コンパイルエラーが出るのは不思議ですね。
ちなみに「select * from "member"」のクォートはエスケープして、
「select * from \"member\"」とする、くらいはありますが…
変わったエラーはどんなものでしょうか?
この回答への補足
>う~ん、コンパイルエラーが出るのは不思議ですね。
>変わったエラーはどんなものでしょうか?
エラーは最初の質問内容にのせてあるものと同じことを言ってると思うのですがそのURLを何度かリロードするとなぜか違うエラーがでることがあるのです。一応長いのですが2つ載せてみます。
ーーー 1 ーーー
HTTPステータス 500 -
type 例外レポート
メッセージ
説明 The server encountered an internal error () that prevented it from fulfilling this request.
例外
org.apache.jasper.JasperException: JSPのクラスをコンパイルできません:
JSP FileName:/dbaccess.jsp
Java FileName:/usr/local/tomcat5.5.25/work/Catalina/localhost/javaroad//org/apache/jsp/dbaccess_jsp.java
JSPファイル: /dbaccess.jsp の中の6行目でエラーが発生しました
Syntax error on token "member", , expected
3: contentType="text/html; charset=euc-jp"
4: %>
5:
6: <%
7: // 内容: データベースにアクセスする
8:
9: // MyDBAccess のインスタンスを生成する
Stacktrace:
org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:98)
org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:330)
org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:435)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:298)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:277)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:265)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:564)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:302)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
ーーー 2 ーーー
HTTPステータス 500 -
type 例外レポート
メッセージ
説明 The server encountered an internal error () that prevented it from fulfilling this request.
例外
org.apache.jasper.JasperException: Exception in JSP: /dbaccess.jsp:6
3: contentType="text/html; charset=euc-jp"
4: %>
5:
6: <%
7: // 内容: データベースにアクセスする
8:
9: // MyDBAccess のインスタンスを生成する
Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:451)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:355)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
原因
javax.servlet.ServletException: ERROR: relation "member" does not exist
(略)
原因
org.postgresql.util.PSQLException: ERROR: relation "member" does not exist
(略)
JSPファイルのソースも同じなのに出力が違う("原因"が出る場合と出ない場合)のがなぜなのかわかりません。
No.4
- 回答日時:
確認したかったのは、JSPファイルでクエリ文を変更した場合のエラーの違いです。
クォートを付けた場合と付けない場合でエラーが変わっているのかと思ったためです。
少し状況を整理しましょうか。
今回の環境としては、
1.OSはVineLinux
2.データベースはPostgreSQL
3.JSPを利用してサンプルプログラムを実行している
大きく分けるとおよそこんな感じです。
原因もこのいずれかにあると思われます(おそらく)
そこで、どこが悪く、どこが悪くないかを判断するため、以前の回答で確認していたわけです。
まず、Javaアプリケーションとして実行して問題ないかどうか、ですが、
これで動作すればPostgreSQLの方はおよそ問題なさそうと判断できます。
※本当はそうとも言い切れないけど…
プログラムとしては、データベースアクセス処理とResultSetの取得(クエリの実行)、
そして最後のクローズ処理があれば細かいところはなくても良いでしょう。
例えば以下のとおりです
// MyDBAccess のインスタンスを生成する
MyDBAccess db = new MyDBAccess();
// データベースへのアクセス
db.open();
//ResultSetの取得(クエリの実行)
ResultSet rs = db.getResultSet("select * from member");
//クエリ実行に成功したら表示
System.out.println("データベースに接続しました。");
// データベースへのコネクションを閉じる
db.close();
こんな感じでJavaファイルを作成し手動でコンパイルし、javaコマンドで実行したらどうなるか。
JSPと同じように「relation …」の例外が出ればデータベースに何か原因があるかも知れません。
クォートの方は、
… db.getResultSet("select * from member");
と、
… db.getResultSet("select * from \"member\"");
という2つで違いがあるかどうか。
違いがあれば、このクエリの実行環境、つまりJSPやTomcatを実行する際には
テーブル名にクォートを付けないといけない、というケースがあったようなので念のためです。
(これはググったら出てきただけなので、詳細な理由は不明ですが…)
あとは最終手段に近くなりますが、先に挙げた1.2.に注目して、
・PostgreSQLで他のデータベースを作成してそちらでも試してみる
・PostgreSQLをインストールし直す(Vineだと大変かなあ…)
・別のPCで環境を作って同じ現象が出るか確認(Winだとやりやすい?)
一応、自分のPC(WinXP)でもやってみましたが、動作しました。
※かなりいいかげんに試したのでJSPが文字化けしてますが…
案外、環境をガラっと変えるとすんなり動いたりするかもしれませんね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- サーバー 別サーバに構築したApache+Tomcatの連携について 2 2023/03/06 23:23
- MySQL 参考書に従って入力したつもりでしたが、最後はエラーがでました。 1 2022/09/28 03:45
- JavaScript [Java] Edgeでのアドレスバー非表示について 3 2022/04/20 17:51
- IT・エンジニアリング プログラマの仕事内容 4 2022/08/13 00:34
- PHP eclipse pleiades phpのインストールについて 1 2023/02/03 17:15
- UNIX・Linux ubuntuのサーバー(virtual box)が、再起動するとデータが消えてしまいます。 4 2022/04/27 21:29
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- MySQL データベースの複製の仕方(mysql) 2 2023/05/30 18:24
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Eclipse(JAVA)のデバッグで他...
-
COBOLで言う外PERFORM
-
Eclipse 実行→Javaアプリケー...
-
JAVAにのeclipseに関する質問で...
-
eclipse実行ができない
-
split関数で区切り文字がない場合
-
「ワークスペースをビルド中」...
-
[JAVA]evalで文字列を計算式に!
-
Javaについての質問です。 コン...
-
バイナリーコードと、ソースコ...
-
例外処理
-
Eclipseのアンインストールの仕方
-
マイクラjavaでForgeを入れたい...
-
html上で、バッチやexeファイル...
-
Eclipseで、プロジェクト名のと...
-
Eclipse 動的プロジェクトで404...
-
Javaをインストールしたんです...
-
RPA(PowerAutomate)の実装について
-
ActivePerlをインストールしよ...
-
eclipse内のjavaファイルをUSB...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
split関数で区切り文字がない場合
-
「ワークスペースをビルド中」...
-
eclipseでスタックサイズを変更...
-
コミット前の更新データをチェ...
-
JAVAにのeclipseに関する質問で...
-
Javaで年月の取得(YYYYMM形式で)
-
Javascriptの値をJava(JSP)へ渡...
-
Eclipse(JAVA)のデバッグで他...
-
エクリプスで実行時、最新クラ...
-
jasper.exceptionとは?
-
環境変数設定で
-
eclipseで「サーバーで実行」表...
-
eclipseのjavaを実行できない
-
Worksheet_Changeが動かない
-
Google Colabでimport soxが出...
-
Javascriptのパーミッション
-
javaからVBAを実行する方法を教...
-
javascriptで、style undefined...
-
バイナリーコードと、ソースコ...
-
[JAVA]evalで文字列を計算式に!
おすすめ情報