質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

Q&A

解決済

3回答

22528閲覧

「トークン "}" に構文エラーがあります」と表示されてしまう

Dash_003

総合スコア27

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

0グッド

0クリップ

投稿2019/08/29 05:30

編集2019/08/29 09:00

servletにjavaのソースコードを書いているのですが、タイトルにあるようにどうにも不可解なエラーが出てしまいます。
全て{}を1セットでまとめており、過不足はないはずなのですが、以下のソースコードの「}」部分にエラーが出てしまいます。

自分ではエラーを突き止められなかったので質問させていただきました。
よろしくお願いします。

}catch (SQLException e) {
//if,elseを閉じる }

問題のソースコード

package dateAll; import java.io.IOException; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class ProcessServ */ @WebServlet("/ProcessServ") public class ProcessServ extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public ProcessServ() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub System.out.println("doGetで処理をしてしまっている"); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //データベースへ接続するためのコード //PostgreSQLへの接続情報 Connection con ; PreparedStatement st; ResultSet rs; String url = "jdbc:postgresql://localhost:5432/database"; String user = "postgres"; String password = "password"; //色々な変数を定義、初期化 int id ; String questionanswer ; int finalid ; int ansid1; int ansid2; int ansid3; String a1; String a2; String a3; //JDBC driver setting //Class.forName("org.postgresql.Driver"); //PostgreSQLへの接続 //SQLを発行 try { st = con.prepareStatement("select id,questionanswer,finalid from question where parentid = ?"); //ProcessPagejspからpostされた値をStringからintに変換し、変数に代入 int post = Integer.parseInt(request.getParameter("postnum")); //SQ発行文の?部分を決定し、抽出されたデータをrsに代入 st.setInt(1, post); rs = st.executeQuery(); //rsに保存された次の質問文のデータを、それぞれidと文章に分けて変数に代入 while (rs.next()) { id = rs.getInt("id"); questionanswer = rs.getString("questionanswer"); finalid = rs.getInt("finalid"); } //finalidがnullの場合とそうでない場合に分岐させる if(finalid != 0) { st = con.prepareStatement("select meigentext,humanname,bookname from idconn left outer join meigen on meigenid"); }else { //質問文に値をセットする request.setAttribute("question", questionanswer); request.setAttribute("id", id); //対応する回答文およびidの取り出し、変数への代入 st.setInt(1, id); rs = st.executeQuery(); while (rs.next()) { ansid1 = rs.getInt("id"); a1 = rs.getString("questionanswer"); ansid2 = rs.getInt("id"); a2 = rs.getString("questionanswer"); ansid3 = rs.getInt("id"); a3 = rs.getString("questionanswer"); } //回答選択肢自身のidをセットする request.setAttribute("ans1", ansid1); request.setAttribute("ans1", ansid2); request.setAttribute("ans1", ansid3); //回答選択肢自身の質問文をセットする request.setAttribute("a1", a1); request.setAttribute("a2", a2); request.setAttribute("a3", a3); }catch (SQLException e) { // TODO 自動生成された catch ブロック e.printStackTrace(); }finally { con.close(); // クローズ処理 } //if,elseを閉じる } //void doPostを閉じる } //classを閉じる }

追記

みなさま回答ありがとうございました。
インデントを見直して冷静に修正したら無事解決する事ができました!
何度見ても間違ってないと思ってましたが恥ずかしい限りです。
この反省を生かし、見やすいコードを意識して書くようにします。。。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/08/29 05:41

インデントぐちゃっとなってるところがあるので揃えてみればわかることもあるのでは。 ただエラーにもよるので、そのエラーメッセージを記載してください。
Dash_003

2019/08/29 05:46

catchの方は 「- 構文エラーがあります。"}" を挿入して Block を完了し てください」 //if,eleseを閉じる と書かれている方は 「トークン "}" に構文エラーがあります。このトークンを削除してください」 と出ています。今現在インデントの見直しをしているのでメッセージが変わる可能性があるかもですが。 今
m.ts10806

2019/08/29 05:48

質問本文に追記してください。
guest

回答3

0

ベストアンサー

if は try-catch文の中にあるはずなのに 閉じ括弧が外になってますよ

Java

1 }catch (SQLException e) { 2 // TODO 自動生成された catch ブロック 3 e.printStackTrace(); 4 }finally { 5 con.close(); // クローズ処理 6 } 7 //if,elseを閉じる 8 }

インデントがごっちゃごちゃだと起こるミスです。
インデントをしっかり意識してコーディングするようにしましょう。
Eclipseを使っているなら自動フォーマットもありますし。

インデントをそろえてみた。

Java

1package dateAll; 2 3import java.io.IOException; 4import java.sql.Connection; 5import java.sql.PreparedStatement; 6import java.sql.ResultSet; 7import java.sql.SQLException; 8 9import javax.servlet.ServletException; 10import javax.servlet.annotation.WebServlet; 11import javax.servlet.http.HttpServlet; 12import javax.servlet.http.HttpServletRequest; 13import javax.servlet.http.HttpServletResponse; 14/** 15 * Servlet implementation class ProcessServ 16 */ 17@WebServlet("/ProcessServ") 18public class ProcessServ extends HttpServlet { 19 private static final long serialVersionUID = 1L; 20 21 /** 22 * @see HttpServlet#HttpServlet() 23 */ 24 public ProcessServ() { 25 super(); 26 // TODO Auto-generated constructor stub 27 } 28 29 /** 30 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 31 */ 32 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 33 // TODO Auto-generated method stub 34 System.out.println("doGetで処理をしてしまっている"); 35 } 36 37 /** 38 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 39 */ 40 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 41 42 //データベースへ接続するためのコード 43 //PostgreSQLへの接続情報 44 Connection con ; 45 PreparedStatement st; 46 ResultSet rs; 47 48 String url = "jdbc:postgresql://localhost:5432/database"; 49 String user = "postgres"; 50 String password = "password"; 51 52 //色々な変数を定義、初期化 53 int id ; 54 String questionanswer ; 55 int finalid ; 56 57 int ansid1; 58 int ansid2; 59 int ansid3; 60 61 String a1; 62 String a2; 63 String a3; 64 65 //JDBC driver setting 66 //Class.forName("org.postgresql.Driver"); 67 68 //PostgreSQLへの接続 69 70 71 //SQLを発行 72 try { 73 st = con.prepareStatement("select id,questionanswer,finalid from question where parentid = ?"); 74 75 //ProcessPagejspからpostされた値をStringからintに変換し、変数に代入 76 int post = Integer.parseInt(request.getParameter("postnum")); 77 78 //SQ発行文の?部分を決定し、抽出されたデータをrsに代入 79 st.setInt(1, post); 80 rs = st.executeQuery(); 81 82 //rsに保存された次の質問文のデータを、それぞれidと文章に分けて変数に代入 83 while (rs.next()) { 84 id = rs.getInt("id"); 85 questionanswer = rs.getString("questionanswer"); 86 finalid = rs.getInt("finalid"); 87 } 88 89 //finalidがnullの場合とそうでない場合に分岐させる 90 if(finalid != 0) { 91 st = con.prepareStatement("select meigentext,humanname,bookname from idconn left outer join meigen on meigenid"); 92 93 }else { 94 //質問文に値をセットする 95 request.setAttribute("question", questionanswer); 96 request.setAttribute("id", id); 97 98 //対応する回答文およびidの取り出し、変数への代入 99 st.setInt(1, id); 100 rs = st.executeQuery(); 101 while (rs.next()) { 102 ansid1 = rs.getInt("id"); 103 a1 = rs.getString("questionanswer"); 104 105 ansid2 = rs.getInt("id"); 106 a2 = rs.getString("questionanswer"); 107 108 ansid3 = rs.getInt("id"); 109 a3 = rs.getString("questionanswer"); 110 } 111 112 //回答選択肢自身のidをセットする 113 request.setAttribute("ans1", ansid1); 114 request.setAttribute("ans1", ansid2); 115 request.setAttribute("ans1", ansid3); 116 117 //回答選択肢自身の質問文をセットする 118 request.setAttribute("a1", a1); 119 request.setAttribute("a2", a2); 120 request.setAttribute("a3", a3); 121 122 }catch (SQLException e) { 123 // TODO 自動生成された catch ブロック 124 e.printStackTrace(); 125 }finally { 126 con.close(); // クローズ処理 127 } 128 //if,elseを閉じる 129 } 130 //void doPostを閉じる 131 } 132//classを閉じる 133} 134

投稿2019/08/29 05:34

編集2019/08/29 05:42
azuapricot

総合スコア2341

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/08/29 05:55

Eclipseが拾ってくれなくて焦りました。 パソコンばっかりやってると字が書けなくなるわけだ。
azuapricot

2019/08/29 05:59

Paiza.io で上からインデント揃えて確認しました()
guest

0

}catch (SQLException e) {

}はどこの{とセットになっているのか見直してみましょう。
本来はtry {とセットになるはずですが、そうなっていますか?

また、

//if,elseを閉じる }

の「if,else」とはどこのことですか?

try-catchとif-elseが入れ子になっていないように見えます。

インデントをちゃんとすれば把握できる内容かと思いますので、
プログラムを書くときはインデントを意識して書きましょう。

投稿2019/08/29 05:38

dice142

総合スコア5158

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

java

1//if,elseを閉じる 2 }

の閉じ括弧の始まりが

java

1 //SQLを発行 2 try {

と認識されています。

catch、finallyの処理を if,elseの閉じ括弧より外側に記述すればコンパイルは通りそうです。

投稿2019/08/29 05:37

tetutetu

総合スコア419

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問