顧客登録画面の更新処理を作成しております。
顧客データの一覧をjspで表示し一覧のレコード横にある更新ボタンの押下でレコードのIDを取得しUpdate.java(servlet)でIDのレコードformに初期値として表示し、更新の処理をしようとしております。
DB接続は全てDAOクラスに一任しております。
Update.java
package servlet; import java.io.IOException; import java.util.List; import javax.servlet.RequestDispatcher; 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 model.GetMutterListLogic; import model.GetSelectUpListLogic; import model.Mutter; import model.PostUpLogic; @WebServlet("/Update") public class Update extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //SelectUprListを取得しリクエストスコープへ保存 GetSelectUpListLogic getSelectUpListLogic = new GetSelectUpListLogic(); List<Mutter> selectUpList = getSelectUpListLogic.execute(); request.setAttribute("selectUpList", selectUpList); //MutterList(全件)を取得しリクエストスコープへ保存 GetMutterListLogic getMutterListLogic = new GetMutterListLogic(); List<Mutter> mutterList = getMutterListLogic.execute(); request.setAttribute("mutterList", mutterList); //フォワード RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/jsp/update.jsp"); dispatcher.forward(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { int id = 0; String str = request.getParameter("id"); id = Integer.parseInt(str); //リクエストパラメータを取得 request.setCharacterEncoding("UTF-8"); int id = request.getParameter("id"); String name = request.getParameter("name"); String tel = request.getParameter("tel"); String gender = request.getParameter("gender"); //更新リストに追加 Mutter mutter = new Mutter(id, name, tel, gender); PostUpLogic postUpLogic = new PostUpLogic(); postUpLogic.execute(mutter); //MutterList(全件)を取得しリクエストスコープへ保存 GetMutterListLogic getMutterListLogic = new GetMutterListLogic(); List<Mutter> mutterList = getMutterListLogic.execute(); request.setAttribute("mutterList", mutterList); //フォワード RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/jsp/main.jsp"); dispatcher.forward(request, response); } }
MutterDAO.java
package DAO; 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 java.util.List; import model.Mutter; public class MutterDAO { //データベース接続に使用する情報 private final String JDBC_URL ="jdbc:h2:tcp://localhost/~/kadai/kadai"; private final String DB_USER = "sa"; private final String DB_PASS = " "; public List<Mutter> findAll() { List<Mutter> mutterList = new ArrayList<>(); //データベースへ接続 try { Connection conn = DriverManager.getConnection(JDBC_URL, DB_USER, DB_PASS); //select文を追加 String sql = "SELECT ID, NAME, TEL, GENDER FROM MUTTER ORDER BY ID DESC"; PreparedStatement pStmt = conn.prepareStatement(sql); //select文を実行し、結果表を取得 ResultSet rs = pStmt.executeQuery(); //結果表に格納されたレコードの内容を //Mutterインスタンスに設定し、ArrayListインスタンスに追加 while (rs.next()) { int id = rs.getInt("ID"); String name = rs.getString("NAME"); String tel = rs.getString("TEL"); String gender = rs.getString("GENDER"); Mutter mutter = new Mutter(id, name, tel, gender); mutterList.add(mutter); } } catch (SQLException e) { e.printStackTrace(); return null; } return mutterList; } public boolean create(Mutter mutter) { //データベースへ接続 try { Connection conn = DriverManager.getConnection(JDBC_URL, DB_USER, DB_PASS); //INSERT文の準備 String sql = "INSERT INTO MUTTER(NAME, TEL, GENDER) VALUES (?, ?, ?)"; PreparedStatement pStmt = conn.prepareStatement(sql); //INSERT文中の「?」に使用する値を設定しSQLを完成 pStmt.setString(1, mutter.getName()); pStmt.setString(2, mutter.getTel()); pStmt.setString(3, mutter.getGender()); //INSERT文を実行(resultには追加された行数が代入される) int result = pStmt.executeUpdate(); if (result !=1) { return false; } } catch (SQLException e) { e.printStackTrace(); return false; } return true; } public boolean update(Mutter mutter) { //データベースへ接続 try { Connection conn = DriverManager.getConnection(JDBC_URL, DB_USER, DB_PASS); //INSERT文の準備 String sql = "UPDATE MUTTER SET NAME=?, TEL=?, GENDER=? WHERE ID=?"; PreparedStatement pStmt = conn.prepareStatement(sql); //UPDATE文中の「?」に使用する値を設定しSQLを完成 pStmt.setString(1, mutter.getName()); pStmt.setString(2, mutter.getTel()); pStmt.setString(3, mutter.getGender()); //INSERT文を実行(resultには追加された行数が代入される) int result = pStmt.executeUpdate(); if (result !=1) { return false; } } catch (SQLException e) { e.printStackTrace(); return false; } return true; } public List<Mutter> findOne() { List<Mutter> selectUpList = new ArrayList<>(); //データベースへ接続 try { Connection conn = DriverManager.getConnection(JDBC_URL, DB_USER, DB_PASS); //select文を追加 String sql = "SELECT * FROM MUTTER WHERE ID=?"; PreparedStatement pStmt = conn.prepareStatement(sql); //select文を実行し、結果表を取得 ResultSet rs = pStmt.executeQuery(); //結果表に格納されたレコードの内容を //Mutterインスタンスに設定し、ArrayListインスタンスに追加 rs.next(); int id = rs.getInt("ID"); String name = rs.getString("NAME"); String tel = rs.getString("TEL"); String gender = rs.getString("GENDER"); Mutter mutter = new Mutter(id, name, tel, gender); selectUpList.add(mutter); } catch (SQLException e) { e.printStackTrace(); return null; } return selectUpList; } }
Mutter.java(Model)
package model; import java.io.Serializable; public class Mutter implements Serializable { private int id; //id private String name; //名前 private String tel; //電話番号 private String gender; //性別 public Mutter(){} public Mutter(String name, String tel, String gender){ this.name = name; this.tel = tel; this.gender = gender; } public Mutter(int id, String name, String tel, String gender) { this.id = id; this.name = name; this.tel = tel; this.gender = gender; } public Mutter(int id) { this.id = id; } public int getId() { return id; } public String getName() { return name; } public String getTel() { return tel; } public String getGender() { return gender; } }
Update.javaで取得したIDをintに変換処理をしていますが
int id = request.getParameter("id");
に、エラーが出て直りません。。。
Stringからintへの変換処理に問題があるのでしょうか?
それとも他に間違った箇所があるのでしょうか?
IDによるレコードの取得もできておりません。
分かりにくい文章ではありますがご教授願います。
質問の追記です。
servletを以下のように変更した場合java.lang.NumberFormatExceptionのエラーが投げられます。
IDはAuto-incrementで生成しているので整数以外の文字列は反映されないはずなのですが...
package servlet; import java.io.IOException; import java.util.List; import javax.servlet.RequestDispatcher; 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 model.GetMutterListLogic; import model.GetSelectUpListLogic; import model.Mutter; import model.PostUpLogic; @WebServlet("/Update") public class Update extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //リクエストパラメータの戻り値の型を変更 request.setCharacterEncoding("UTF-8"); String str = request.getParameter("id"); int id = Integer.parseInt(str); //SelectUprListを取得しリクエストスコープへ保存 GetSelectUpListLogic getSelectUpListLogic = new GetSelectUpListLogic(); List<Mutter> selectUpList = getSelectUpListLogic.findOne(id); request.setAttribute("selectUpList", selectUpList); //MutterList(全件)を取得しリクエストスコープへ保存 GetMutterListLogic getMutterListLogic = new GetMutterListLogic(); List<Mutter> mutterList = getMutterListLogic.execute(); request.setAttribute("mutterList", mutterList); //フォワード RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/jsp/update.jsp"); dispatcher.forward(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //リクエストパラメータを取得 request.setCharacterEncoding("UTF-8"); String str = request.getParameter("id"); int id = Integer.parseInt(str); String name = request.getParameter("name"); String tel = request.getParameter("tel"); String gender = request.getParameter("gender"); //更新リストに追加 Mutter mutter = new Mutter(id, name, tel, gender); PostUpLogic postUpLogic = new PostUpLogic(); postUpLogic.execute(mutter); //MutterList(全件)を取得しリクエストスコープへ保存 GetMutterListLogic getMutterListLogic = new GetMutterListLogic(); List<Mutter> mutterList = getMutterListLogic.execute(); request.setAttribute("mutterList", mutterList); //フォワード RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/jsp/main.jsp"); dispatcher.forward(request, response); } }