executeUpdate();を利用した更新
Javaで会員情報更新機能を作ってるのですが、POST送信先がNULLで受け渡しが出来ていないのとexecuteUpdate();の使い方が誤った状態と思って作業したのですが、分からないので書き込みました。
会員情報変更POSTクラス
<%@ page contentType="text/html; charset=UTF-8" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>マイページ</title> <link href="style.css" rel="stylesheet" type="text/css"> </head> <body> <div id="main"> <h1>詳細画面</h1> <form action="update" method="post"> <c:forEach var="customer" items="${customerList}"> <label for="email">Email</label> <input type="text" id="name=" value ="${customer.email}"> <label for="password">Passowrd</label> <input type="text" id="password" name="password" value ="${customer.password}"> <label for="name">氏名</label> <input type="text" id="name=" value="${customer.name}"> <label for="gender">性別</label> <c:if test="${customer.gender == 0}"> <input type="radio" name="gender" value="0" checked=checked>男 <input type="radio" name="gender" value="1">女 </c:if> <c:if test="${customer.gender == 1}"> <input type="radio" name="gender" value="0">男 <input type="radio" name="gender" value="1" checked=checked>女 </c:if> <label for="blood">血液型</label> <select name="blood"> <option value="${customer.blood}">${customer.blood}型</option> <option value="A">A型</option> <option value="B">B型</option> <option value="O">O型</option> <option value="AB">AB型</option> </select> <label for="memo">メモ</label> <textarea name="memo" rows="4" cols="41" maxlength="100">${customer.memo}</textarea> <input type="hidden" name="id" value="${customer.id}"> <input type="submit" value="更新"> </c:forEach> </form> <form action="delete" method="post"> <c:forEach var="customer" items="${customerList}"> <input type="hidden" name="id" value="${customer.id}"> <input type="hidden" name="email" value="${customer.email}"> <input type="hidden" name="password" value="${customer.password}"> <input type="hidden" name="name" value="${customer.name}"> <input type="hidden" name="gender" value="${customer.gender}"> <input type="hidden" name="blood" value="${customer.blood}"> <input type="hidden" name="memo" value="${customer.memo}"> <input type="submit" value="削除"> </c:forEach> </form> </div> </body> </html>
POSTされた値をDBに接続するクラス
package service; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; public class UpdateService { public void updateCustomer (String email, String password, String name, String gender, String blood, String old, String id) { String dbName = "system_user"; String dbPropaties = "?cvharacterEncoding=UTF-8&serverTimezone=JST"; String dbUrl ="jdbc:mySQL://localhost:3306/" + dbName +dbPropaties; String dbUser = "root"; String dbPassword = "admin"; String sql ="update customer set email=?, password=?, name=?, gender=?, blood=?, old=? where id=?;"; try { Class.forName("com.mysql.jdbc.Driver"); Connection coon = DriverManager.getConnection(dbUrl, dbUser, dbPassword); PreparedStatement ps = coon.prepareStatement(sql); //プリペアステートメントでマイページで選択した値を代入 ps.setString(1, email); ps.setString(2, password); ps.setString(3, name); ps.setString(4, gender); ps.setString(5, blood); ps.setString(6, old); ps.setString(7, id); ps.executeUpdate(); ps.close(); coon.commit(); } catch (SQLException | ClassNotFoundException e) { e.printStackTrace(); } } }
DBクラスを呼び出すクラス
package controller; import java.io.IOException; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import service.UpdateService; @WebServlet("/update") public class UpdateController extends HttpServlet{ protected void doPost (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{//22行目MySQLにログインする String id = request.getParameter("id"); String email = request.getParameter("email"); String password = request.getParameter("password"); String name = request.getParameter("name"); String gender = request.getParameter("gender"); String blood = request.getParameter("blood"); String old = request.getParameter("old"); UpdateService updateservice = new UpdateService(); updateservice.updateCustomer(email,password,name,gender,blood,old,id); ServletContext sc = getServletContext(); sc.getRequestDispatcher("/" + "update.jsp").forward(request, response); } }
補足情報(FW/ツールのバージョンなど)
Eqlipse
tomcat
何が起きてるんでしょう。
Exceptionに落ちてスタックトレース出てるとか(つまりエラーが起きてるとか)状況きちんと書いてください。
https://teratail.com/help/question-tips#questionTips3-4
まぁ、あと、そもそもどこまでちゃんと動いているか(進んでいるか)を見極めましょう。質問文だけを見ると「executeUpdateの使い方」とありますが、使い方だけの話であれば、何かしら参考にできるサイトを読めば済む話になります。
質問者さんのコードに依存した話ならば、「上記のPOST送信先のupdate文クラス」で、以下の部分のコードなど、ちょっとあり得ない使い方です。UPDATE文でexecuteQueryの実行、ResultSetの取得は無いですね。
> ps.executeUpdate();
> ps.close();
> ResultSet rs = ps.executeQuery();
> while (rs.next()) {
修正をしましたので確認お願いします。
回答1件
あなたの回答
tips
プレビュー