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

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

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

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

561閲覧

JSPでデータを更新したいけど例外エラーがでる。

kunetyure

総合スコア23

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2022/06/06 12:38

前提、 実現したいこと

データベースから指定したクラスの生徒たちの情報を取り出し、そこから生徒を一人選択して情報を変更(クラス番号、氏名(姓)、氏名(名)、カナ(姓)、カナ(名)、生年月日)し、更新したいです。データベースからクラス番号を検索して取り出し、変更したい生徒の情報を編集するところまでは問題なく動くのですが、最後更新したら例外エラーが出てしまいます。原因がわかる方にご教授願いたいです。
例外として処理されているということはデータ自体は送れていると思います。

発生している問題・エラーメッセージ

-SQL例外 -メッセージ: SQL構文にエラーがあります。'simei_1 ='è�'木'、simei_2 ='å”å¿—'、kana_1 ='アラã‚'の近くで使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください。 kana_2 ='コウã‚・'、umare ='1'1行目

該当のソースコード

jsp

1<%@ page contentType="text/html;charset=UTF-8"%> 2<% response.setContentType("text/html;charset=UTF-8");%> 3 4 5<HTML> 6 <HEAD><TITLE>class_update.jsp</TITLE></HEAD> 7 <BODY BGCOLOR="#FFFFFF"> 8 class_update.jsp 9 <CENTER> 10<CAPTION><FONT SIZE="+3" COLOR="#0000FF"> 11<B><<名簿変更>></B> 12</FONT>></CAPTION>> 13<BR> 14<FORM METHOD= "POST" NAME ="koushin2" ACTION = "/aa22/servlet/class_update3"> 15 16 17<FONT SIZE="+1"COLOR="#0000FF">名簿情報を変更してください。</FONT> 18<P> 19<HR SIZE="5" WIDTH="80%"> 20<CENTER> 21<TABLE BORDER=O> 22<TR> 23<TD>クラス</TD> 24<TD><SELECT NAME="class_no" SIZE="1"> 25<option value ="aaa111">aaa111 26<option value ="aaa112">aaa112 27<option value ="aaa113">aaa113 28<option value="aaa114">aaa114 29<option value="aaa115">aaa115 30<option value="aaa116">aaa116 31<option value="aaa117">aaa117 32<option value="aaa118">aaa118 33<option value="aaa119">aaa119 34<option value="aaa120">aaa120 35<option value="aaa121">aaa121 36<option value="aaa122">aaa122 37<option value="aaa123">aaa123 38<option value="aaa124">aaa124 39<option value="aaa125">aaa125 40<option value="aaa126">aaa126 41<option value="aaa127">aaa127 42<option value="aaa128">aaa128 43<option value="aaa129">aaa129 44</select> 45 46<SCRIPT Language="JavaScript"> 47 48<!-- 49document.koushin2.class_no.selectedIndex = <%= request.getAttribute("class_no").toString() %>; 50// --> 51 52</SCRIPT> 53</TD> 54</TR> 55<TR> 56<TD>出席</TD> 57<TD> 58<INPUT TYPE="TEXT" NAME= "syusseki_no" SIZE = 20 59VALUE = "<%= request.getAttribute("syusseki_no").toString()%>"> 60</TD> 61</TR> 62 63<TR> 64<TD>学籍番号</TD> 65<TD><%= request.getAttribute("gakuseki_no").toString()%></TD> 66<TR> 67 68<TR> 69<TD>氏名(姓)</TD> 70<TD> 71<INPUT TYPE="TEXT" NAME= "simei_1" SIZE = 20 72VALUE = "<%= request.getAttribute("simei_1").toString()%>"> 73</TD> 74</TR> 75 76 77<TR> 78<TD>氏名(名)</TD> 79<TD> 80<INPUT TYPE="TEXT" NAME= "simei_2" SIZE = 20 81VALUE = "<%= request.getAttribute("simei_2").toString()%>"> 82</TD> 83</TR> 84 85<TR> 86<TD>カナ(姓)</TD> 87<TD> 88<INPUT TYPE="TEXT" NAME= "kana_1" SIZE = 20 89VALUE = "<%= request.getAttribute("kana_1").toString()%>"> 90</TD> 91</TR> 92 93<TR> 94<TD>カナ(名)</TD> 95<TD> 96<INPUT TYPE="TEXT" NAME= "kana_2" SIZE = 20 97VALUE = "<%= request.getAttribute("kana_2").toString()%>"> 98</TD> 99</TR> 100 101 102<TR> 103<TD>生年月日</TD> 104<TD> 105<INPUT TYPE="TEXT" NAME= "umare" SIZE = 20 106VALUE = "<%= request.getAttribute("umare").toString()%>"> 107</TD> 108</TR> 109</TABLE> 110<P> 111<HR SIZE="5" WIDTH="80%"> 112<BR><CENTER> 113<INPUT TYPE= "SUBMIT" VALUE="名簿更新"> 114<INPUT TYPE="RESET" VALUE="入力クリア"><BR><BR> 115</FORM> 116 117 118 <HR> 119 <A HREF="/aa11/update.html">名簿選択へ戻る</A> 120 <A HREF="/aa11/class_index.html">メニューへ戻る</A> 121 <BR> 122 </CENTER> 123 </BODY> 124</HTML>

java

1import java.io.IOException; 2import java.io.PrintWriter; 3import java.sql.Connection; 4import java.sql.DriverManager; 5import java.sql.SQLException; 6import java.sql.Statement; 7 8import javax.servlet.ServletException; 9import javax.servlet.annotation.WebServlet; 10import javax.servlet.http.HttpServlet; 11import javax.servlet.http.HttpServletRequest; 12import javax.servlet.http.HttpServletResponse; 13@WebServlet(urlPatterns= {"/servlet/class_update3"}) 14public class class_update3 extends HttpServlet{ 15public void doPost( 16HttpServletRequest req, 17HttpServletResponse res) 18throws ServletException,IOException{ 19 20 21 22 23/** 24* DB:URL 25*/ 26 27final String URL = "jdbc:mysql://localhost/nhs10601db?useUnicode=true&characterEncoding=UTF-8"; 28/** 29*DB:ユーザ 30*/ 31final String USER = "root"; 32/** 33*DB:パスワード 34*/ 35final String PASSWORD= "root"; 36/** 37*DB:ドライバ 38*/ 39final String DRIVER = "com.mysql.jdbc.Driver"; 40 41Connection con = null; 42Statement stmt = null; 43 44PrintWriter out; 45req.setCharacterEncoding("UTF-8"); 46res.setContentType("text/html;charset=UTF-8"); 47out = res.getWriter(); 48 49//webブラウザのFormからパラメータを取得 50String koushin2Str = req.getParameter("koushin2"); 51 52String class_noStr = req.getParameter("class_no"); 53String gakuseki_noStr = req.getParameter("gakuseki_no"); 54String syusseki_noStr = req.getParameter("syusseki_no"); 55String simei_1Str = req.getParameter("simei_1"); 56String simei_2Str = req.getParameter("simei_2"); 57String kana_1Str = req.getParameter("kana_1"); 58String kana_2Str = req.getParameter("kana_2"); 59String umareStr = req.getParameter("umare"); 60 61 62 63try{ 64//MySQL Driver ローディング 65Class.forName(DRIVER); 66//MySQLへの接続 67con = DriverManager.getConnection(URL,USER,PASSWORD); 68//SQL格納 69stmt = con.createStatement(); 70 71//SQL実行名簿テーブル更新 72 73StringBuffer query = new StringBuffer(); 74query.append("UPDATE class_table SET class_no ='"); 75query.append(class_noStr); 76query.append("',syusseki_no='"); 77query.append(syusseki_noStr); 78query.append("'WHERE gakuseki_no='"); 79query.append(gakuseki_noStr); 80query.append("',simei_1='"); 81query.append(simei_1Str); 82query.append("',simei_2='"); 83query.append(simei_2Str); 84query.append("',kana_1='"); 85query.append(kana_1Str); 86query.append("',kana_2='"); 87query.append(kana_2Str); 88query.append("',umare='"); 89query.append(umareStr); 90query.append("')"); 91stmt.executeUpdate(query.toString()); 92 93 94 95//S更新結果 表示 96StringBuffer sb = new StringBuffer(); 97sb.append("<html>"); 98sb.append("<head><title>名簿変更</title></head>"); 99sb.append("<body bgcolor='#ffffff'>"); 100sb.append("class_update3.java"); 101sb.append("<center>"); 102sb.append("<CAPTION><FONT SIZE='+3' COLOR='#0000FF'>"); 103sb.append("<B>"); 104query.append("'"); 105sb.append("<<名簿変更>>"); 106sb.append("</B></FONT></CAPTION>"); 107sb.append("<h1>"); 108sb.append("<BR><BR><BR>"); 109sb.append("<h1>"); 110sb.append("名簿変更完了しました。"); 111sb.append("</h1>"); 112sb.append("</center><br><br>"); 113sb.append("<HR><A HREF='/aa11/class_update1.html'>"); 114sb.append("名簿更新に戻る"); 115sb.append("</A>"); 116sb.append("<A HREF='/aa11/class_index.html'>"); 117sb.append("ホームへ戻る"); 118sb.append("</A>"); 119sb.append("</body>"); 120sb.append("</html>"); 121out.println(sb.toString()); 122 123//切断 124 125stmt.close(); 126con.close(); 127} 128//例外処理 129 130catch(SQLException ex){ 131 out.println("-SQL Exception-" + "<BR>" ); 132 out.println( "Message : " + "<BR>" ); 133 134while(ex != null){ 135 out.println(ex.getMessage()+ "<BR>"); 136 ex = ex.getNextException(); 137 } 138} 139 140catch(Exception ex){ 141 ex.printStackTrace(out); 142 } 143 } 144} 145 146 147 148 149 150

試したこと

このエラーが出る前にほかのエラーが出てたので、org.git.mm.mysql.Driverを
final String DRIVER = "com.mysql.jdbc.Driver";になおしたら今回のエラーが出てきました。(前のエラーは解決。)
sqlのバージョンは14.12です。

Eclipseはヘルプで調べたところVersion: Photon Release (4.8.0)でした。

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

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

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

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

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

guest

回答1

0

ベストアンサー

※ 解答ではありません

原因がわかる方にご教授願いたいです。

わかるも何も、「SQL構文にエラーがあります。」と書いてあるのだから、まずは SQL の誤りを疑うべきです。エラーメッセージはそれ以降文字化けしているため(それもおかしな話ですが、ひとまず置いておいて)ピンとこないのであれば、こんな感じに、適当なパラメータを与えて SQL を出力してみるのが手っ取り早いです。

Java

1 String class_noStr = "class_no"; 2 String gakuseki_noStr = "gakuseki_no"; 3 String syusseki_noStr = "syusseki_no"; 4 String simei_1Str = "simei_1"; 5 String simei_2Str = "simei_2"; 6 String kana_1Str = "kana_1"; 7 String kana_2Str = "kana_2"; 8 String umareStr = "umare"; 9 10 StringBuffer query = new StringBuffer(); 11 query.append("UPDATE class_table SET class_no ='"); 12 query.append(class_noStr); 13 query.append("',syusseki_no='"); 14 query.append(syusseki_noStr); 15 query.append("'WHERE gakuseki_no='"); 16 query.append(gakuseki_noStr); 17 query.append("',simei_1='"); 18 query.append(simei_1Str); 19 query.append("',simei_2='"); 20 query.append(simei_2Str); 21 query.append("',kana_1='"); 22 query.append(kana_1Str); 23 query.append("',kana_2='"); 24 query.append(kana_2Str); 25 query.append("',umare='"); 26 query.append(umareStr); 27 query.append("')"); 28 29 System.out.println(query);

ちなみに、こんな SQL が生成されているようです。ぱっと見で、おかしい部分があると思うのですが・・・

SQL

1UPDATE class_table SET class_no ='class_no',syusseki_no='syusseki_no'WHERE gakuseki_no='gakuseki_no',simei_1='simei_1',simei_2='simei_2',kana_1='kana_1',kana_2='kana_2',umare='umare')

投稿2022/06/06 15:33

momodx

総合スコア185

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

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

kunetyure

2022/06/06 16:44

回答ありがとうございます。sql構文見直して、下記のように直したらエラーは治りました。ですが、データがなぜか変更されません。どうすればいいでしょうか? StringBuffer query = new StringBuffer(); query.append("UPDATE class_table SET class_no = '"); query.append(class_noStr); query.append("',syusseki_no = '"); query.append(syusseki_noStr); query.append("',simei_1 = '"); query.append(simei_1Str); query.append("',simei_2 = '"); query.append(simei_2Str); query.append("',kana_1 = '"); query.append(kana_1Str); query.append("',kana_2 = '"); query.append(kana_2Str); query.append("',umare = '"); query.append(umareStr); query.append("'WHERE gakuseki_no = '"); query.append(gakuseki_noStr); query.append("'"); stmt.executeUpdate(query.toString());
momodx

2022/06/06 22:45

> どうすればいいでしょうか? いや、知らんがな・・・ 仮に、「UPDATE 文が実行できていて、でも更新されない」という事ならば、WHERE 句の条件に合うレコードがテーブル上に無いから、とかなんじゃないですか。 なお、少々くどい話になりますが、このサイトは、「○○がわかりません → それは□□ですよ」的なやり取りをする場所であって、システム完成までマンツーマンでデバッグしてもらえる場所ではありません。ですから、追加で質問するにあたっては、いきなり人にお任せするのではなく、せめて多少なりとも原因を調べてみてからするようにしましょう。 今回のケースであれば、「本当に意図通り動く SQL が生成できているのか」くらいは調べておいて頂きたいものですね。意図通り動くかどうかは、SQL を出力させるなりデバッガで見るなりして、データベースのコマンドインターフェースに打ち込んでみれば確認できそうですよね?
kunetyure

2022/06/07 02:19

コメントへの返信ありがとうございます。すいません今度からはちゃんと調べてから質問するようにします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問