画面上で編集しボタンを押下すると、188行目で例外が発生してしまいます。どなたか解決方法を教えていただけないでしょうか。 「// SQL実行 ps.executeUpdate();」で例外が発生」
手順
1.サーブレットを実行する
2.実行した画面上でテキストボックスないを編集する
3.ボタンを押下
4.188行目で例外が発生してしまう
JSP <%@page contentType="text/html; charset=UTF-8"%> <%@page import="java.sql.*"%> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>料金</title> </head> <body> <form action="./Seisan" method="post"> <P>コース選択</P> <table> <%@page contentType="text/html; charset=UTF-8"%> <table border="1"> <tr> <forEach var="ryoukin" items="${ryoukin}"> <th><input type="submit" name="coursea" value="コースA"></th> <th><input type="submit" name="courseb" value="コースB"></th> <th><input type="submit" name="coursec" value="コースC"></th> <th><input type="submit" name="opcoursea" value="OPコースA"></th> <th><input type="submit" name="opcourseb" value="OPコースB"></th> <th><input type="submit" name="opcoursec"value="OPコースC"></th> </tr> <tbody> <tr> <td><input type = text name="coursea_value" value = "${ryoukin.coursea_value}"></td> <td><input type = "text" name="courseb_value" value = "${ryoukin.courseb_value}"></td> <td><input type = "text" name="coursec_value" value = "${ryoukin.coursec_value}"></td> <td><input type = "text" name="opcoursea_value" value = "${ryoukin.opcoursea_value}"></td> <td><input type = "text" name="opcourseb_value"value = "${ryoukin.opcourseb_value}"></td> <td><input type = "text" name="opcoursec_value"value = "${ryoukin.opcoursec_value}"></td> </forEach> </tr> </table> </thead> </table> <input type="submit" value="清算"> <input type="submit" value="更新"> </form> </body> </html>
サーブレット package seisan; import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import javax.annotation.Resource; 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 javax.sql.DataSource; import ryoukin.java.ryoukin_beans; import test_ryoukin.ryoukin; /** * Servlet implementation class SeisanServlet */ @WebServlet("/Seisan") public class SeisanServlet extends HttpServlet { private static final long serialVersionUID = 1L; // Define datasource/connection pool for Resource Injection @Resource(name = "jdbc/WebApp") private DataSource dataSource; /** * @see HttpServlet#HttpServlet() */ public SeisanServlet() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ @SuppressWarnings("unused") protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub response.setContentType("text/html; charset=UTF-8"); response.getWriter().append("Served at: ").append(request.getContextPath()); //一覧データ用の変数(ArrayList)を用意する ArrayList<ryoukin> salesList = new ArrayList<>(); // 【料金情報を取得する】 ryoukin_beans ryoukin = null; // ■DB接続 Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; // 接続情報 String url = "jdbc:mariadb://localhost:3306/ryoukin"; String user = "user02"; String password = "user02"; try { // 接続処理 conn = DriverManager.getConnection(url, user, password); // ■検索処理実行 // SQL作成 String sql = "SELECT * FROM seisan"; System.out.println(sql); // SQL準備 ps = conn.prepareStatement(sql); // SQL実行 rs = ps.executeQuery(); // データを読込み、JavaBeansに設定する ryoukin = new ryoukin_beans(); while (rs.next()) { // データ読込 int coursea = rs.getInt("coursea_value"); int courseb = rs.getInt("courseb_value"); int coursec = rs.getInt("coursec_value"); int opcoursea = rs.getInt("opcoursea_value"); int opcourseb = rs.getInt("opcoursea_value"); int opcoursec = rs.getInt("opcoursea_value"); // JavaBeansにデータを設定 ryoukin.setCoursea_value(coursea); ryoukin.setCourseb_value(courseb); ryoukin.setCoursec_value(coursec); ryoukin.setOpcoursea_value(opcoursea); ryoukin.setOpcourseb_value(opcourseb); ryoukin.setOpcoursec_value(opcoursec); } System.out.println(ryoukin); } catch (SQLException e) { // 接続失敗時の処理 e.printStackTrace(); } finally { try { // ■クローズ処理 // 検索結果 if (rs != null) { rs.close(); } // SQL文 if (ps != null) { ps.close(); } // DB接続 if (conn != null) { conn.close(); } } catch (SQLException e) { e.printStackTrace(); } } // 【表示値を設定する】 request.setAttribute("ryoukin", ryoukin); // 【画面に遷移する】 request.getRequestDispatcher("Newryoukin.jsp").forward(request, response); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub System.out.println("辻"); //リクエストパラメータを取得 request.setCharacterEncoding("UTF-8"); System.out.println("SeisantServlet.doPost()"); // 【文字化け対応】 request.setCharacterEncoding("utf-8"); // ■リクエストデータ取得 int coursea_value = Integer.parseInt(request.getParameter("coursea_value")); int courseb_value = Integer.parseInt(request.getParameter("courseb_value")); int coursec_value = Integer.parseInt(request.getParameter("coursec_value")); int opcoursea_value = Integer.parseInt(request.getParameter("opcoursea_value")); int opcourseb_value = Integer.parseInt(request.getParameter("opcourseb_value")); int opcoursec_value = Integer.parseInt(request.getParameter("opcoursec_value")); System.out.println(coursea_value); System.out.println(courseb_value); System.out.println(coursec_value); System.out.println(opcoursea_value); System.out.println(opcourseb_value); System.out.println(opcoursec_value); // ■DB接続 Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; // 接続情報 String url = "jdbc:mariadb://localhost:3306/ryoukin"; String user = "user02"; String password = "user02"; try { // 接続処理 conn = DriverManager.getConnection(url, user, password); // SQL作成 String sql = "UPDATE seisan SET coursea_value = ?, courseb_value = ?, coursec_value = ?,opcoursea_value = ?,opcourseb_value = ?,opcoursec_value = ? upd_username = ?, upd_datetime = now()"; System.out.println(sql); // SQL準備 ps = conn.prepareStatement(sql); // SQL実行 ps.executeUpdate();←ここで例外が発生 // パラメータ設定 ps.setInt(1, coursea_value); // ■コミット conn.commit(); } catch (SQLException e) { // エラー時の処理 e.printStackTrace(); } finally { try { // ■クローズ処理 // 検索結果 if (rs != null) { rs.close(); } // SQL文 if (ps != null) { ps.close(); } // DB接続 if (conn != null) { conn.close(); } } catch (SQLException e) { e.printStackTrace(); } } response.sendRedirect("coursea_value"); doGet(request, response); } }
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。