前提・実現したいこと
ここに質問の内容を詳しく書いてください。
JDBCプログラミングおよびサーブレットとJSPを用いて、タスク管理プログラムを作っています。
その中で、JSPのフォームにIDを入力して送信するとそのIDをメンバー表から探し出し、当該ID存在した場合はタスク管理表にIDを追加する機能を実装しております。
発生している問題
単体でのエラーは発生しないのですが、結合して実際にフォームに入力して送信してもデータベースへの反映がうまくいきません。 エラーメッセージや例外も発生していないため、ここからどうすればいいのか手詰まりの状況です。
該当のソースコード1/5(業務ロジック)
java
1package mod4; 2 3import java.io.IOException; 4import java.sql.SQLException; 5import java.util.Date; 6 7import javax.servlet.RequestDispatcher; 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 14@WebServlet("/ChooseMember") 15public class ChooseMember extends HttpServlet{ 16 17 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 18 19 //エンコーディング方式の指定 20 request.setCharacterEncoding("UTF-8"); 21 //オブジェクトの定義 22 MemberDAO mmbDAO=new MemberDAO("localhost","mysql","mysql"); 23 ManHoursDAO mmhDAO = new ManHoursDAO("localhost","mysql","mysql"); 24 Member mmb = new Member(); 25 Manhours mmh = new Manhours(); 26 //memberテーブルからIDを取得 27 try { 28 //memberDBへの接続 29 mmbDAO.connect(); 30 //memberテーブルへIDをキーに検索し、mmbに格納 31 mmb = mmbDAO.getMember("memberId"); 32 33 if(mmb != null) { 34 mmb.print(); 35 }else { 36 System.out.println("該当者が見つかりません。id:" + "memberId"); 37 } 38 }catch(SQLException e) { 39 e.printStackTrace(); 40 }finally { 41 try { 42 //接続のクローズ 43 mmbDAO.close(); 44 }catch(SQLException e) { 45 e.printStackTrace(); 46 } 47 } 48 //mmbをもとにmanhoursテーブルを更新 49 try { 50 //DBへの接続 51 mmhDAO.connect(); 52 //MemberテーブルにIDをキーに格納 53 if(mmb != null) { 54 mmh.setMemrid(mmb.getMemberId()); 55 }else { 56 System.out.println("該当者が見つかりません。id:" + "memberId"); 57 } 58 }catch(SQLException e) { 59 e.printStackTrace(); 60 }finally { 61 try { 62 //接続のクローズ 63 mmhDAO.close(); 64 }catch(SQLException e) { 65 e.printStackTrace(); 66 } 67 } 68 } 69}
該当のソースコード2/5(MemberDAO)
java
1package mod4; 2 3import java.sql.Connection; 4import java.sql.DriverManager; 5import java.sql.PreparedStatement; 6import java.sql.ResultSet; 7import java.sql.SQLException; 8import java.util.ArrayList; 9 10public class MemberDAO { 11 12 private Connection con; // 接続オブジェクト 13 private String server; // DBサーバ名 14 private String user; // ユーザー名 15 private String password; // パスワード 16 17 // コンストラクタ 18 public MemberDAO(String server, String user, String password) { 19 this.server = server; 20 this.user = user; 21 this.password = password; 22 } 23 24 // 接続 25 public void connect() throws SQLException { 26 String url = "jdbc:mysql://" + server + ":3306/ourDB"; 27 con = DriverManager.getConnection(url, user, password); 28 } 29 30 // 接続のクローズ 31 public void close() throws SQLException { 32 if (con != null) { 33 con.close(); 34 } 35 } 36 37 // 1件検索 38 public Member getMember(String memberId) throws SQLException { 39 ResultSet res = null; 40 PreparedStatement stmt = null; 41 Member mmb = null; 42 String sql = "select * from member where memberID=?"; 43 44 try { 45 stmt = con.prepareStatement(sql); 46 stmt.setString(1, memberId); 47 res = stmt.executeQuery(); 48 49 if (res.next()) { 50 mmb = new Member(); 51 mmb.setMemberId(res.getString(1)); 52 mmb.setName(res.getString(2)); 53 } 54 } finally { 55 if (res != null) { 56 res.close(); 57 } 58 if (stmt != null) { 59 stmt.close(); 60 } 61 } 62 return mmb; 63 } 64 }
該当のソースコード3/5(ManHoursDAO)
java
1 2package mod4; 3 4import java.sql.Connection; 5import java.sql.DriverManager; 6import java.sql.PreparedStatement; 7import java.sql.ResultSet; 8import java.sql.SQLException; 9import java.util.ArrayList; 10 11public class ManHoursDAO { 12 13 private Connection con; // 接続オブジェクト 14 private String server; // DBサーバ名 15 private String user; // ユーザー名 16 private String password; // パスワード 17 18 // コンストラクタ 19 public ManHoursDAO(String server, String user, String password) { 20 this.server = server; 21 this.user = user; 22 this.password = password; 23 } 24 25 // 接続 26 public void connect() throws SQLException { 27 String url ="jdbc:mysql://" + server + ":3306/ourDB"; 28 con = DriverManager.getConnection(url, user, password); 29 } 30 31 // 接続のクローズ 32 public void close() throws SQLException { 33 if (con != null) { 34 con.close(); 35 } 36 } 37 38 // レコードの更新 39 public void updateManhours(Manhours man) throws SQLException { 40 PreparedStatement stmt = null; 41 String sql = "UPDATE manhours" + 42 "SET (mh01 = ?, mh02 = ?, mh03 = ?, mh04 = ?, mh05 = ?, mh06 = ?, mh07 = ?, mh08 = ?, mh09 = ?, mh10 = ?, mh11 = ?, mh12 = ?, mh13 = ?, mh14 = ?, mh15 = ?" + 43 ", mh16 = ?, mh17 = ?, mh18 = ?, mh19 = ?, mh20 = ?, mh21 = ?, mh22 = ?, mh23 = ?, mh24 = ?, mh25 = ?, mh26 = ?, mh27 = ?, mh28 = ?, mh29 = ?, mh30 = ?, mh31 = ? )" + 44 "(WHERE 'MemberID =?', 'TaskID =?')"; 45 46 try { 47 stmt = con.prepareStatement(sql); 48 stmt.setString(1, man.getMemberId()); 49 stmt.setInt(2, man.getTaskId()); 50 stmt.setDate(3, man.getYm()); 51 stmt.setDate(4, man.getSchesta()); 52 stmt.setDate(5, man.getScheend()); 53 stmt.setDate(6, man.getSta()); 54 stmt.setDate(7, man.getEnd()); 55 stmt.setInt(8, man.getSchemh()); 56 stmt.setInt(9, man.getMh1()); 57 stmt.setInt(10, man.getMh2()); 58 stmt.setInt(11, man.getMh3()); 59 stmt.setInt(12, man.getMh4()); 60 stmt.setInt(13, man.getMh5()); 61 stmt.setInt(14, man.getMh6()); 62 stmt.setInt(15, man.getMh7()); 63 stmt.setInt(16, man.getMh8()); 64 stmt.setInt(17, man.getMh9()); 65 stmt.setInt(18, man.getMh10()); 66 stmt.setInt(19, man.getMh11()); 67 stmt.setInt(20, man.getMh12()); 68 stmt.setInt(21, man.getMh13()); 69 stmt.setInt(22, man.getMh14()); 70 stmt.setInt(23, man.getMh15()); 71 stmt.setInt(24, man.getMh16()); 72 stmt.setInt(25, man.getMh17()); 73 stmt.setInt(26, man.getMh18()); 74 stmt.setInt(27, man.getMh19()); 75 stmt.setInt(28, man.getMh20()); 76 stmt.setInt(29, man.getMh21()); 77 stmt.setInt(30, man.getMh22()); 78 stmt.setInt(31, man.getMh23()); 79 stmt.setInt(32, man.getMh24()); 80 stmt.setInt(33, man.getMh25()); 81 stmt.setInt(34, man.getMh26()); 82 stmt.setInt(35, man.getMh27()); 83 stmt.setInt(36, man.getMh28()); 84 stmt.setInt(37, man.getMh29()); 85 stmt.setInt(38, man.getMh30()); 86 stmt.setInt(39, man.getMh31()); 87 stmt.executeUpdate(); 88 } finally { 89 if (stmt != null) { 90 stmt.close(); 91 } 92 } 93 } 94 95 // レコードの削除 96 public void deleteManhours(String memberId) throws SQLException { 97 PreparedStatement stmt = null; 98 String sql = "DELETE FROM manhours" + 99 "(WHERE 'MemberID =?', 'TaskID =?')"; 100 101 try { 102 stmt = con.prepareStatement(sql); 103 stmt.setString(1, memberId); 104 stmt.executeUpdate(); 105 } finally { 106 if (stmt != null) { 107 stmt.close(); 108 } 109 } 110 } 111}
該当のソースコード4/5(Member)
java
1package mod4; 2 3import java.io.Serializable; 4 5public class Member implements Serializable { 6 private String memberId; // ID 7 private String name; // 名前 8 9 public Member() { // コンストラクタ 10 } 11 public void print() { // データの表示 12 System.out.print(memberId + ","); 13 System.out.print(name + ","); 14 } 15 public void setMemberId(String memberId) { // IDを設定 16 this.memberId = memberId; 17 } 18 public void setName(String name) { // 名前を設定 19 this.name = name; 20 } 21 public String getMemberId() { // IDを取得 22 return memberId; 23 } 24 public String getName() { // 名前を取得 25 return name; 26 } 27}
該当のソースコード5/5(MemberIdInputForm)
jsp
1<%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3<!DOCTYPE html> 4<html> 5<head> 6<meta charset="UTF-8"> 7<title>Insert title here</title> 8</head> 9<body> 10<table border="1"> 11<tr style="background-color:#99cccc;"> 12<th >担当者ID</th> 13<th >担当者</th> 14</tr> 15<tr> 16<td> 17<form method="get" action="../jdbc/mod4/ChooseMember.java"> 18<input type="text" name="memberId"><br> 19</form> 20</td> 21</tr> 22<tr> 23<td> 24<input type="submit"> 25<input type="reset"> 26</td> 27</tr> 28</table> 29</body> 30</html>
memberデータベース
manhoursデータベース
試したこと
ChooseMember.java(業務ロジック)単体で動かしてみたところ、当然idの受け取りをしていないので「該当者が見つかりません」が2回表示されました。
また、フォワード先URLに対し不備がある可能性も探ってみましたが問題ありませんでした。
補足情報(FW/ツールのバージョンなど)
Java SE 11.0.8
Tomcat 9
Java開発環境 Eclipse 4.13
データベース MySQL
データベース開発環境A5:SQL Mk-2