アプリ版:「スタンプのみでお礼する」機能のリリースについて

こんばんわ。
JSPにてIF文を使ったDBテーブル表示のWEBを作成したのですが
クローズの行でエラーが表示されてしまいます。
エラー内容は「型の開始が不正」ですというものです。
知識不足で恐縮ですがご教示願います。

<%@page contentType="text/html; charset=Windows-31J"%>
<%@page import="java.sql.*"%>
<%!
// サーブレットのinitメソッドに相当
public void jspInit() {
try {
// JDBCドライバをロード
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
} catch (Exception e) {
e.printStackTrace();
}
}
%>
<HTML>
<HEAD>
<TITLE>一覧</TITLE></HEAD>
<CENTER>
<B>一覧</B>
<TABLE border="3" BORDERCOLOR="#9999ff">
<TR>
<TD>年齢</TD>
<TD>電話番号</TD>
</TR>
String year = request.getParameter("年齢");
String namber = request.getParameter("電話番号");
<%
// データベースへのアクセス開始
Connection con = null;
Statement stmt = null;
ResultSet rs = null;
try {
// データベースに接続するConnectionオブジェクトの取得
con = DriverManager.getConnection("jdbc:sqlserver://sqlserverName;DatabaseName=NAME","ID","PW");
// データベース操作を行うためのStatementオブジェクトの取得
stmt = con.createStatement();

if(year.length() >= 0){ %>
// SQL()を実行して、結果を得る
rs = stmt.executeQuery("SELECT * FROM テーブルA where 年齢='"+ paramA +"'");
rs = stmt.executeQuery("SELECT * FROM テーブルB where 年齢='"+ paramA +"'");
<% } else if(namber.length() >= 0){ %>
rs = stmt.executeQuery("SELECT * FROM テーブルA where 電話番号='"+ paramC +"'");
rs = stmt.executeQuery("SELECT * FROM テーブルB where 電話番号='"+ paramC +"'");
<% } %>
// 得られた結果をレコードごとに表示
while (rs.next()){

String aa = rs.getString("名前");
String bb = rs.getString("住所");
%>
<TR bgcolor="#ccffcc">
<FORM method="post" action="Next.jsp">
<input type="hidden" name="num" value="<%= rs.getString("ID")%>">
<%-- 年齢フィールドの表示 --%>
<TD><%= aa %></TD>
<%-- 電話番号フィールドの表示 --%>
<TD><%= bb %></TD>
<TD align="center">
</form>
</TD>
</TR>
<%
}

} catch (Exception e) {
e.printStackTrace();
// エラー表示プログラム
out.write(e.getMessage());
} finally {
// データベースとの接続をクローズ
try { rs.close(); } catch (Exception e) {}
try { stmt.close(); } catch (Exception e) {}
try { con.close(); } catch (Exception e) {}
}
%>
</TABLE>
</BODY>
</HTML>

A 回答 (3件)

kuwazooです。


---------------------------------------------
String year = request.getParameter("年齢");
String namber = request.getParameter("電話番号");
の部分のスクリプトレットで囲まれていないと言う部分が未熟故に分りかねます。
---------------------------------------------
jspでは、簡単に言いますとHTMLタグ(見た目)を書く部分と
プログラムを書く部分が含まれるということはご存知ですか?
で、jspでは、ここはHTML部分、ここはプログラム部分と
見分けて動作するわけです。(簡単に言うと)
見分けてもらう為には、ここは、宣言、ここは式、ここはプログラム
を書いたよ、ここは、HTMLを書いたんだよというふうに
書き方に決まりがあるのです。それを無視すれば、意図した通りには
絶対に動きません。もう一度、どう書いたらどう認識されるか
参考書をごらんになってみると良いかと思われます。

で、問題の、
String year = request.getParameter("年齢");
String namber = request.getParameter("電話番号");

ですが、これは、プログラムですよね?
HTMLとして、表示させる文字ではないですよね?
だとしたら、プログラムを書く場所にルールに従って
書く必要があります。
(※宣言の部分に書いた場合と、プログラムを書く場所に書いた場合
では、動作が違うので、ここも、参考書を見て適宜調整してください。)
とりあえず、今回は、プログラムを書く部分に書いてみて動作を確認してみたらいかがでしょうか?
というわけで、その後の行に <% が書いてありますよね?
これをコメントアウトするか、消してください。そして
String year = request.getParameter("年齢");
の上に書くようにしてください。その他はいじらないでください。
<% ~ %> で囲った部分は、javaプログラムと判断されるルールなので
これで、問題の2行がjavaプログラムとして解釈されるようになったわけです。ご参考になさってください。

※本は、誤植や間違いが多いのでそれをうつして実行しても動かない場合も多々あります。まず基本ルールを叩き込み、それを念頭に置きながら
ソースは見ていったほうが勉強にもなるし、吸収が早いと思われます。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます☆

とてもご親切かつ丁寧なご説明で分かりやすかったです!

>ここは、宣言、ここは式、ここはプログラム
少しは理解していたつもりでしたが再度、参考書にて
勉強します。。。

ご説明を受けてプログラムを眺めていると
javaプログラムと判断されていない部分に書いていた様です。

もう1度基本ルールを徹底したいと思います。
本当にありがとうございました♪

お礼日時:2007/07/06 15:18

kuwazooです。

ちょと間違えました。

String year = request.getParameter("年齢");
String namber = request.getParameter("電話番号");

のメンバ定義ですが、スクリプトレットで囲まれて
いないような気がするのですがどうでしょうか?
この他にもプログラムを書いている場所で
適切にスクリプトレットで囲まれているかどうか確認してみて下さい。
宣言<%! 宣言文; %>、式<%= 式 %>の部分も適切に記述されているか
確認をしてみて下さい。
プログラムを部分で、javaの環境でコンパイルエラーが
出るようなところはjspでもエラーになります。文法的に
あっているか、記述方法が正しいかどうか今一度ご確認を
してみてください。

この回答への補足

色々、考えてみて作成した所、IFの変更でエラーはでなくなりました。
ありがとうございます。

しかし、レコードが表示されないのですがません。
値を持ってきていない為にIF文が機能していない様に思います。
ご指摘頂いた
String year = request.getParameter("年齢");
String namber = request.getParameter("電話番号");
の部分のスクリプトレットで囲まれていないと言う部分が未熟故に分りかねます。

ご教示頂けませんでしょうか?よろしくお願い致します。

補足日時:2007/07/03 00:02
    • good
    • 0
この回答へのお礼

ありがとうございます!
メンバ定義はIF文を書く前には上記の記述で通っていた記憶があるのですがもう1度確認させて頂きたいと思います。

お礼日時:2007/06/30 11:12

String year = request.getParameter("年齢");


String namber = request.getParameter("電話番号");

のメンバ定義ですが、スクリプトレットで囲まれて
いないような気がするのですがどうでしょうか?
この他にもプログラムを書いている(htmlタグ以外)場所で
適切なスクリプトレットで囲まれているかどうか確認してみて下さい。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています