Update文が実行されない原因がわかりません。

実現したいこと

ショッピングサイトの商品購入確認画面→商品購入完了画面へ移る際にUPDATE文を実行したい。

成功条件

商品購入完了画面→商品一覧画面に戻った時に、商品の在庫数が購入した数に応じて減っていれば成功。

前提

ショッピングサイトを構築している。
JSP→Servlet→Logic→DAO(ここでUPDATE文を実行する)

発生している問題

UPDATE文が実行されない。

該当のソースコード

confirm.jsp

1<%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3<%@ page import="model.Item, java.util.List"%> 4<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 5<% 6Item item = (Item) request.getAttribute("item"); 7 8int itemQuantity = (Integer) request.getAttribute("itemQuantity"); 9int totalPrice = item.getPrice() * itemQuantity; 10 11request.setAttribute("totalPrice", totalPrice); 12%> 13<!DOCTYPE html> 14<html lang="ja"> 15<head> 16<meta charset="UTF-8"> 17<meta name="viewport" content="width=device-width,initial-scale=1"> 18<title>購入システム</title> 19<link rel="stylesheet" href="css/style.css"> 20<link 21 href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" 22 rel="stylesheet" 23 integrity="sha384-9ndCyUaIbzAi2FUVXJi0CjmCapSmO7SnpJef0486qhLnuZ2cdeRhO02iuK6FUUVM" 24 crossorigin="anonymous"> 25</head> 26<body> 27 <h1 class="p-1">商品購入確認</h1> 28 <table class="table"> 29 <thead> 30 <tr> 31 <th>商品ID</th> 32 <th>商品名</th> 33 <th>価格</th> 34 <th>購入数</th> 35 <th>合計金額</th> 36 </tr> 37 </thead> 38 <tbody> 39 <tr> 40 <td>${item.itemId}</td> 41 <td>${item.itemName}</td> 42 <td>${String.format("%,d" ,item.price)}</td> 43 <td>${itemQuantity}</td> 44 <td>${String.format("%,d",totalPrice)}</td> 45 </tr> 46 </tbody> 47 </table> 48 <div class="d-flex gap-1"> 49 <form action="ItemServlet"> 50 <input type="submit" value="戻る" class="btn btn-secondary text-white"> 51 </form> 52 <form action="ResultServlet"> 53 <input type="hidden" name="itemId" value="${item.itemId}"> <input 54 type="hidden" name="itemQuantity" value="${itemQuantity}"> <input 55 type="submit" value="購入確定" class="btn btn-primary text-white"> 56 </form> 57 </div> 58 <script 59 src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js" 60 integrity="sha384-geWF76RCwLtnZ8qwWowPQNguL3RmwHVBC9FhGdlKrxdiJJigb/j/68SIy3Te4Bkz" 61 crossorigin="anonymous"></script> 62</body> 63</html>

ResultServlet.java

1package servlet; 2 3import java.io.IOException; 4 5import javax.servlet.RequestDispatcher; 6import javax.servlet.ServletException; 7import javax.servlet.annotation.WebServlet; 8import javax.servlet.http.HttpServlet; 9import javax.servlet.http.HttpServletRequest; 10import javax.servlet.http.HttpServletResponse; 11 12import logic.StockLogic; 13import model.Shopping; 14 15/** 16 * Servlet implementation class ResultServlet 17 */ 18@WebServlet("/ResultServlet") 19public class ResultServlet extends HttpServlet { 20 private static final long serialVersionUID = 1L; 21 22 /** 23 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 24 */ 25 protected void doGet(HttpServletRequest request, HttpServletResponse response) 26 throws ServletException, IOException { 27 RequestDispatcher dispatcher = request.getRequestDispatcher("WEB-INF/result.jsp"); 28 dispatcher.forward(request, response); 29 } 30 31 /** 32 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 33 */ 34 protected void doPost(HttpServletRequest request, HttpServletResponse response) 35 throws ServletException, IOException { 36 String itemId = request.getParameter("itemId"); 37 int itemQuantity = Integer.parseInt(request.getParameter("itemQuantity")); 38 39 Shopping shopping = new Shopping(itemId, itemQuantity); 40 StockLogic stockLogic = new StockLogic(); 41 42 stockLogic.updateStock(shopping); 43 44 RequestDispatcher dispatcher = request.getRequestDispatcher("WEB-INF/result.jsp"); 45 dispatcher.forward(request, response); 46 47 } 48 49}

Shopping.java

1package model; 2 3public class Shopping { 4 String itemId; 5 int quantity; 6 7 public Shopping() { 8 9 } 10 11 public Shopping(String itemId, int quantity) { 12 super(); 13 this.itemId = itemId; 14 this.quantity = quantity; 15 } 16 17 public String getItemId() { 18 return itemId; 19 } 20 21 public void setItemId(String itemId) { 22 this.itemId = itemId; 23 } 24 25 public int getQuantity() { 26 return quantity; 27 } 28 29 public void setQuantity(int quantity) { 30 this.quantity = quantity; 31 } 32 33}

StockLogic.java

1package logic; 2 3import dao.StockDAO; 4import model.Shopping; 5 6public class StockLogic { 7 public void updateStock(Shopping shopping) { 8 StockDAO dao = new StockDAO(); 9 dao.updateStock(shopping); 10 } 11}

StockDAO.java

1package dao; 2 3import java.sql.Connection; 4import java.sql.DriverManager; 5import java.sql.PreparedStatement; 6import java.sql.SQLException; 7 8import model.Shopping; 9 10public class StockDAO { 11 private static final String JDBC_URL = "jdbc:mysql://localhost:3306/shop?useSSL=false"; 12 private static final String DB_USER = "root"; 13 private static final String DB_PASS = "step1234"; 14 15 public void updateStock(Shopping shopping) { 16 try (Connection conn = DriverManager.getConnection(JDBC_URL, DB_USER, DB_PASS); 17 PreparedStatement ps = conn 18 .prepareStatement("update stock set quantity = quantity - ? where item_id = ?")) { 19 ps.setInt(1, shopping.getQuantity()); 20 ps.setString(2, shopping.getItemId()); 21 ps.executeUpdate(); 22 23 } catch (SQLException e) { 24 e.printStackTrace(); 25 } 26 27 } 28}

試したこと

1.StockDAO.javaのps.setInt、ps.setStringの内容を変更した。

StockDAO.java

1ps.setInt(1, shopping.getQuantity()); 2ps.setString(2, shopping.getItemId()); 3 4// 元々は下記のように記述していた。 5ps.setInt(1, itemId); 6ps.setString(2, itemQuantity);

2.MySQLのSELECT * FROM stock;で、UPDATEが実行されているか確認した。

補足情報(FW/ツールのバージョンなど)

eeclipse, TomCat9

コメントを投稿

0 コメント