表題のことをしたいのですが、
「HTTPステータス 500 - An exception occurred processing JSP page」という
エラー表示がされてしまいます。
名前、会社、住所というテキストボックスに入力して
決定ボタンを押下するとデータベースにレコード追加されるのを
目的としていますが、下記のコードで間違いはありますでしょうか?
-----------------------------------------------
<%@ page language="java" %>
<%@ page import="java.sql.*"%>
<%@ page contentType="text/html; charset=Shift_JIS"%>
<%
request.setCharacterEncoding("Shift_JIS");
String strName=request.getParameter("name");
String strCompany=request.getParameter("company");
String strAddress=request.getParameter("address");
Class.forName("com.mysql.jdbc.Driver");
String strConn="jdbc:mysql://localhost/***" +
"?user=****&password=****" +
"&useUnicode=true&characterEncoding=Shift_JIS";
Connection conn = DriverManager.getConnection(strConn);
Statement stmt = conn.createStatement();
String strSql="insert into person (name,company,address) values('"+strName + "'," + strCompany + "'," + strAddress + ")";
int result= stmt.executeUpdate(strSql);
stmt.close();
conn.close();
%>
<%//一覧ページにforward%>
<jsp:forward page="****.jsp"/>
-----------------------------------------------
>int result= stmt.executeUpdate(strSql); の行でエラーが出ているっぽいのですが。。。
TomcatとMySQLを使用しています。
※環境など情報が不足していましたら、そちらもご指摘ください。
開発勉強中で、まだ理解が足りていない所が多数あります。
No.3
- 回答日時:
まず、基本的なことを学んでからDBに手を出したほうがいいんじゃない?
>db cannot be resolved
>conn cannot be resolved to a variable
>conn cannot be resolved
読んでそのままの意味。
そんな変数しらんわって言ってるの。
PreparedStatement strSql=db.prepareStatement("INSERT INTO person(name,company,address) VALUES(?,?,?,?)");
dbってどこに宣言してるの?
connをtry{}の中に入れたらfinally{}では使えないよ?
変数のスコープについて調べよう。
SQLに手を出す前の話だよ。
エラーメッセージはかなり親切。
それすら読み取ろうとしないならこの先上達しない。
この回答への補足
>>db cannot be resolved
>>conn cannot be resolved to a variable
>>conn cannot be resolved
>読んでそのままの意味。
>そんな変数しらんわって言ってるの。
色んなサイトで調べてるうちに訳わからんようになってました。
dbから直前の行で宣言しているconnに修正すると上手くいきました。
>connをtry{}の中に入れたらfinally{}では使えないよ?
>変数のスコープについて調べよう。
try, catch, finallyを少し調べると、ダメだった理由が分かりました。
全体的に下記のように修正し、例外処理など課題はまだありますが
とりあえずの目的は達成できました。
ありがとうございました。
--------------------------------------
<%@ page language="java" %>
<%@ page import="java.sql.*,java.util.*,java.text.*"%>
<%@ page contentType="text/html; charset=Shift_JIS"%>
<%
request.setCharacterEncoding("Shift_JIS");
String strName=request.getParameter("name");
String strCompany=request.getParameter("company");
String strAddress=request.getParameter("address");
Class.forName("com.mysql.jdbc.Driver");
String strConn="jdbc:mysql://localhost/****" +
"?user=****&password=****" +
"&useUnicode=true&characterEncoding=Shift_JIS";
Connection conn = DriverManager.getConnection(strConn);
try{
PreparedStatement strSql=conn.prepareStatement("INSERT INTO person(name,company,address) VALUES(?,?,?)");
strSql.setString(1,request.getParameter("name"));
strSql.setString(2,request.getParameter("company"));
strSql.setString(3,request.getParameter("address"));
strSql.executeUpdate();
}catch(SQLException e){
out.println("コネクションがありません");
}finally{
conn.close();
}
%>
<%//一覧ページにforward%>
<jsp:forward page="****.jsp"/>
No.2
- 回答日時:
エラー内容をまずは貼る。
エラーエラー言っても何のエラーかわかるだけで回答しやすい。
PreparedStatement strSql=db.prepareStatement("INSERT INTO person(name,company,address) VALUES(?,?,?)");
strSql.setString(1,request.getParameter("id"));
strSql.setString(2,request.getParameter("name"));
strSql.setString(3,request.getParameter("company"));
strSql.setString(4,request.getParameter("address"));
で、?の数とセットしている数がおかしいのは気づかない?
あと例外処理がどうおこなわれてるかわからないけど
コネクションとかのリソースの開放をfinally内で実行したほうがいいよ。
この回答への補足
ご指摘ありがとうございます。
>で、?の数とセットしている数がおかしいのは気づかない?
すみません、直しましたがそれでもエラーが出てしまいます。
※内容は以下です。
>あと例外処理がどうおこなわれてるかわからないけど
コネクションとかのリソースの開放をfinally内で実行したほうがいいよ。
こちらも追加してみましたが、やはりエラーが出ます。
お手数ですが、ご教示お願いします。
<エラー内容>-------------------------------------------
type 例外レポート
メッセージ JSPのクラスをコンパイルできません:
説明 The server encountered an internal error that prevented it from fulfilling this request.
例外
org.apache.jasper.JasperException: JSPのクラスをコンパイルできません:
JSPファイル: /hhh/add_person2.jsp の中の25行目でエラーが発生しました
db cannot be resolved
22: Connection conn = DriverManager.getConnection(strConn);
23:
24: //プレースホルダで SQL 作成
25: PreparedStatement strSql=db.prepareStatement("INSERT INTO person(name,company,address) VALUES(?,?,?,?)");
26: //SQLコマンド文字列を作成
27: strSql.setString(1,request.getParameter("id"));
28: strSql.setString(2,request.getParameter("name"));
JSPファイル: /hhh/add_person2.jsp の中の39行目でエラーが発生しました
conn cannot be resolved to a variable
36:
37: }finally{
38: try{
39: if(conn!=null){conn.close();}
40: }catch(SQLException e){
41: e.printStackTrace();
42: }
JSPファイル: /hhh/add_person2.jsp の中の39行目でエラーが発生しました
conn cannot be resolved
36:
37: }finally{
38: try{
39: if(conn!=null){conn.close();}
40: }catch(SQLException e){
41: e.printStackTrace();
42: }
Stacktrace:
org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:103)
org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:199)
org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:446)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:361)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:336)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:323)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:564)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:357)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:405)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:349)
javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
<ソースコード>-------------------------------------------
<%@ page language="java" %>
<%@ page import="java.sql.*,java.util.*,java.text.*"%>
<%@ page contentType="text/html; charset=Shift_JIS"%>
<%
request.setCharacterEncoding("Shift_JIS");
String strName=request.getParameter("name");
String strCompany=request.getParameter("company");
String strAddress=request.getParameter("address");
Class.forName("com.mysql.jdbc.Driver");
try{
String strConn="jdbc:mysql://localhost/****" +
"?user=****&password=****" +
"&useUnicode=true&characterEncoding=Shift_JIS";
Connection conn = DriverManager.getConnection(strConn);
PreparedStatement strSql=db.prepareStatement("INSERT INTO person(name,company,address) VALUES(?,?,?,?)");
strSql.setString(1,request.getParameter("id"));
strSql.setString(2,request.getParameter("name"));
strSql.setString(3,request.getParameter("company"));
strSql.setString(4,request.getParameter("address"));
strSql.executeUpdate();
}catch(SQLException e){
out.println("コネクションがありません");
}finally{
try{
if(conn!=null){conn.close();}
}catch(SQLException e){
e.printStackTrace();
}
}
%>
<%//一覧ページにforward%>
<jsp:forward page="****.jsp"/>
No.1
- 回答日時:
strCompany の左側と strAddress の両側にカンマが無いように見えます。
またこのような方法でSQLを組み立てるのは望ましい方法ではありません。
preparedStatementでプレースホルダを使用しましょう。
この回答への補足
ありがとうございます。
色々調べて、セキュリティや効率の観点でpreparedStatementで組むのが良いと
理解しました。
ですが、前述のコードをpreparedStatementで作成したところ、
エラーになってしまいます。
色々試してロジックとしても、おかしくはないかと思っていますが
間違いなどありましたら、またご指摘お願いします。
--------------------------------------------------
<%@ page language="java" %>
<%@ page import="java.sql.*,java.util.*,java.text.*"%>
<%@ page contentType="text/html; charset=Shift_JIS"%>
<%
request.setCharacterEncoding("Shift_JIS");
String strName=request.getParameter("name");
String strCompany=request.getParameter("company");
String strAddress=request.getParameter("address");
Class.forName("com.mysql.jdbc.Driver");
String strConn="jdbc:mysql://localhost/****" +
"?user=****&password=****" +
"&useUnicode=true&characterEncoding=Shift_JIS";
Connection conn = DriverManager.getConnection(strConn);
PreparedStatement strSql=db.prepareStatement("INSERT INTO person(name,company,address) VALUES(?,?,?)");
strSql.setString(1,request.getParameter("id"));
strSql.setString(2,request.getParameter("name"));
strSql.setString(3,request.getParameter("company"));
strSql.setString(4,request.getParameter("address"));
strSql.executeUpdate();
conn.close();
%>
<%//一覧ページにforward%>
<jsp:forward page="****.jsp"/>
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHP MySql ページング 2 2022/09/20 06:38
- MySQL PHPとMySQLを使った掲示板の作り方 1 2022/06/02 13:00
- PHP PHP一覧表示した項目にリンクをはりたい 1 2023/07/12 17:08
- PHP DBのハッシュ化したパスワードをpassword_verifyで戻し照合したのですが上手く行きません 2 2023/02/06 13:24
- その他(プログラミング・Web制作) laravel 本番環境でメールが送れません。 1 2023/02/17 17:57
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- PHP PHP MySql 画像を取得 1 2022/06/04 14:05
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- アプリ Android studio 初心者 Hello Android!しか表示されない 1 2023/08/01 08:47
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Eclipseで、プロジェクト名のと...
-
シンボルが見つかりませんとい...
-
Javaのエラーについてです
-
JSP内でString型からint型に変...
-
演算子*はjava.lang.String.dou...
-
java.lang.StackOverflowErrort...
-
eclipseでのライブラリの追加に...
-
S2daoのSqlファイルでのDBア...
-
Eclipseで次のエラー箇所にジャ...
-
Eclipse デバッグ エラー処理
-
タグが閉じてないというエラー...
-
JSPで意味不明のコンパイルエラー
-
oracle java1.7でsignerエラー
-
(急募)Java 3回間違えたら強...
-
エラー:org.springframeworkが...
-
重複jarの調査の仕方
-
コンパイル時にエラーが出てし...
-
eclipseのエラーについて質問で...
-
eclipseでのsvn認証エラー回避方法
-
Antでのビルドにエラー
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Eclipseで、プロジェクト名のと...
-
シンボルが見つかりませんとい...
-
エラー:org.springframeworkが...
-
tomcat起動時エラー
-
Javaのエラーについてです
-
タグが閉じてないというエラー...
-
コンパイル時にエラーが出てし...
-
構文エラーのやり直しについて
-
eclipseをバージョンアップした...
-
eclipseでのsvn認証エラー回避方法
-
Eclipseで次のエラー箇所にジャ...
-
JBossについて
-
JSPの表示時エラー
-
「型 ArrayList は総称ではあり...
-
Win32コンソールアプリでnamesp...
-
Eclipseの環境について
-
致命的: StandardServer.await:...
-
javaw.exeプロセスが正常起動し...
-
getParameterについて
-
JSP内でString型からint型に変...
おすすめ情報