質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
JDBC

JDBC(Java DataBase Connectivity)は、Javaとリーレーショナルデータベースに接続させる基本的なAPIです。Java上でSQLステートメントを発行することで、データベースの種類に影響を受ないDB操作を可能とします。

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

サーブレット

サーブレット(Servlets)とはウェブやアプリケーションサーバー上に動くプログラムのことであり、ウェブブラウザや他のHTTPクライエントとデータベースやHTTPサーバー上のアプリケーションの中間層としての働きをします。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

Q&A

1回答

2582閲覧

JDBCプログラミングでデータベースが更新できない

Themokka

総合スコア0

JDBC

JDBC(Java DataBase Connectivity)は、Javaとリーレーショナルデータベースに接続させる基本的なAPIです。Java上でSQLステートメントを発行することで、データベースの種類に影響を受ないDB操作を可能とします。

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

サーブレット

サーブレット(Servlets)とはウェブやアプリケーションサーバー上に動くプログラムのことであり、ウェブブラウザや他のHTTPクライエントとデータベースやHTTPサーバー上のアプリケーションの中間層としての働きをします。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

0グッド

0クリップ

投稿2020/10/30 05:53

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

shinami

2020/10/30 10:57

ChooseMemberクラス(1/5業務ロジック)にmmhDAO.updateManhours()が無いんですが書き忘れですか? 更新できるようなそれらしきソースはそこしか無いのでそれが原因とは思いますがupdateやinsertを実行しないとデータベースへ反映できないかと。
guest

回答1

0

ManHoursDAO.javaのUPDATE文ですが、テーブル名の後ろにスペースが必要なのでは?

String sql = "UPDATE manhours" + "SET (mh01 = ?, mh02 = ?, mh03 = ?, mh04 = ?, mh05 = ?, mh06 = ?, mh07 = ?, mh08 = ?, mh09 = ?, mh10 = ?, mh11 = ?, mh12 = ?, mh13 = ?, mh14 = ?, mh15 = ?" + ", mh16 = ?, mh17 = ?, mh18 = ?, mh19 = ?, mh20 = ?, mh21 = ?, mh22 = ?, mh23 = ?, mh24 = ?, mh25 = ?, mh26 = ?, mh27 = ?, mh28 = ?, mh29 = ?, mh30 = ?, mh31 = ? )" + "(WHERE 'MemberID =?', 'TaskID =?')";

String sql = "UPDATE manhours " + "SET (mh01 = ?, mh02 = ?, mh03 = ?, mh04 = ?, mh05 = ?, mh06 = ?, mh07 = ?, mh08 = ?, mh09 = ?, mh10 = ?, mh11 = ?, mh12 = ?, mh13 = ?, mh14 = ?, mh15 = ?" + ", mh16 = ?, mh17 = ?, mh18 = ?, mh19 = ?, mh20 = ?, mh21 = ?, mh22 = ?, mh23 = ?, mh24 = ?, mh25 = ?, mh26 = ?, mh27 = ?, mh28 = ?, mh29 = ?, mh30 = ?, mh31 = ? )" + "(WHERE 'MemberID =?', 'TaskID =?')";

投稿2020/10/30 07:08

apo

総合スコア362

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問