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

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

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

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

ウェブアプリケーション

ウェブアプリケーションとは、ウェブ上でアクセスされるアプリケーションのことを呼びます。この場合におけるウェブとは、インターネットやイントラネット上を意味します。

データベース

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

Q&A

解決済

1回答

472閲覧

javaのウェブアプリからデータベースにinsertができません

ronboo

総合スコア13

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

ウェブアプリケーション

ウェブアプリケーションとは、ウェブ上でアクセスされるアプリケーションのことを呼びます。この場合におけるウェブとは、インターネットやイントラネット上を意味します。

データベース

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

0グッド

1クリップ

投稿2022/07/27 12:57

前提

入力画面で「名前」と「コメント」を入力すると、
それらがデータベースに格納されていくというアプリを学習のために作っています。

発生している問題・エラーメッセージ

特にエラーが出ているわけではないと思うのですが、
名前等を入力してもデータベースに格納されません。

アプリの概要としては、
「InputComment」で入力された名前等の情報を
「SaveComment」→「SaveCommentBL」→「CommentDao」と受け渡し、
データベースに格納するというものです。

該当のソースコード

java

1package work; 2 3import java.io.IOException; 4import java.io.PrintWriter; 5 6import javax.servlet.ServletException; 7import javax.servlet.http.HttpServlet; 8import javax.servlet.http.HttpServletRequest; 9import javax.servlet.http.HttpServletResponse; 10 11 12public class InputComment extends HttpServlet { 13 private static final long serialVersionUID = 1L; 14 15 public InputComment() { 16 super(); 17 } 18 19 protected void doGet(HttpServletRequest request, HttpServletResponse response) 20 throws ServletException, IOException { 21 22 response.setContentType("text/html;charset=UTF-8"); 23 24 PrintWriter out = response.getWriter(); 25 26 out.println("<html> "); 27 out.println("<head> "); 28 out.println(" <title>コメント入力</title> "); 29 out.println("</head> "); 30 out.println("<body> "); 31 out.println(" <h2>コメント入力画面</h2> "); 32 out.println(" <form action=\"SaveComment\" method=\"post\"> "); 33 out.println(" <p>名前: "); 34 out.println(" <input type=\"text\" name=\"NAME\" maxlength = \"20\"> "); 35 out.println(" </p> "); 36 out.println(" <p>コメント:<br> "); 37 out.println(" <textarea name=\"MESSAGE\" rows=\"4\" cols=\"50\" maxlength = \"250\"></textarea> "); 38 out.println(" </p> "); 39 out.println(" <input type=\"submit\" value=\"送信\"> "); 40 out.println(" </form> "); 41 out.println(" <br> "); 42 out.println(" <a href=\"ShowAllComment\">コメント一覧画面へ</a> "); 43 out.println("</body> "); 44 out.println("</html> "); 45 46 } 47 48 protected void doPost(HttpServletRequest request, HttpServletResponse response) 49 throws ServletException, IOException { 50 doGet(request, response); 51 } 52 53}

java

1package work; 2 3import java.io.IOException; 4 5import javax.servlet.ServletException; 6import javax.servlet.http.HttpServlet; 7import javax.servlet.http.HttpServletRequest; 8import javax.servlet.http.HttpServletResponse; 9 10 11public class SaveComment extends HttpServlet { 12 private static final long serialVersionUID = 1L; 13 14 public SaveComment() { 15 super(); 16 } 17 18 protected void doGet(HttpServletRequest request, HttpServletResponse response) 19 throws ServletException, IOException { 20 doPost(request, response); 21 } 22 23 protected void doPost(HttpServletRequest request, HttpServletResponse response) 24 throws ServletException, IOException { 25 26 response.setContentType("text/html;charset=UTF-8"); 27 28 request.setCharacterEncoding("UTF-8"); 29 30 boolean succesFlg = true; 31 32 String name = request.getParameter("NAME"); 33 String message = request.getParameter("MESSAGE"); 34 35 CommentsDto dto = new CommentsDto(); 36 dto.setName( name ); 37 dto.setMessage( message ); 38 39 SaveCommentBL logic = new SaveCommentBL(); 40 succesFlg = true; 41 42 if (succesFlg) { 43 44 response.sendRedirect("htmls/finish.html"); 45 46 } else { 47 48 response.sendRedirect("htmls/error.html"); 49 50 } 51 } 52} 53

java

1package work; 2 3 4public class SaveCommentBL { 5 6 public boolean executeInsertSurvey(CommentsDto dto) { 7 8 boolean succesInsert = false ; 9 10 CommentsDao dao = new CommentsDao(); 11 succesInsert = dao.doInsert(dto); 12 13 return succesInsert; 14 } 15 16} 17

java

1package work; 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; 9import java.util.List; 10 11 12public class CommentsDao { 13 14 String DRIVER_NAME = "com.mysql.cj.jdbc.Driver"; 15 16 String JDBC_URL = "jdbc:mysql://localhost/test_db?characterEncoding=UTF-8&serverTimezone=JST&useSSL=false"; 17 18 String USER_ID = "test_user"; 19 20 String USER_PASS = "test_pass"; 21 22 23 public boolean doInsert(CommentsDto dto) { 24 25 try { 26 Class.forName(DRIVER_NAME); 27 } catch (ClassNotFoundException e) { 28 e.printStackTrace(); 29 } 30 31 Connection con = null ; 32 PreparedStatement ps = null ; 33 34 boolean isSuccess = true ; 35 36 try { 37 38 con = DriverManager.getConnection(JDBC_URL, USER_ID, USER_PASS); 39 40 con.setAutoCommit(false); 41 42 StringBuffer buf = new StringBuffer(); 43 buf.append(" INSERT INTO comments ( "); 44 buf.append(" NAME, "); 45 buf.append(" MESSAGE, "); 46 buf.append(") VALUES ( "); 47 buf.append(" ?, "); 48 buf.append(" ? "); 49 buf.append(") "); 50 51 ps = con.prepareStatement(buf.toString()); 52 53 ps.setString( 1, dto.getName() ); 54 ps.setString( 2, dto.getMessage() ); 55 56 ps.executeUpdate(); 57 58 } catch (SQLException e) { 59 60 e.printStackTrace(); 61 62 isSuccess = false ; 63 64 } finally { 65 66 if(isSuccess){ 67 try { 68 con.commit(); 69 } catch (SQLException e) { 70 e.printStackTrace(); 71 } 72 73 }else{ 74 try { 75 con.rollback(); 76 } catch (SQLException e) { 77 e.printStackTrace(); 78 } 79 } 80 81 if (ps != null) { 82 try { 83 ps.close(); 84 } catch (SQLException e) { 85 e.printStackTrace(); 86 } 87 } 88 89 if (con != null) { 90 try { 91 con.close(); 92 } catch (SQLException e) { 93 e.printStackTrace(); 94 } 95 } 96 97 } 98 99 return isSuccess; 100 } 101 102 103 104 105 public List<CommentsDto> doSelect() { 106 107 try { 108 Class.forName(DRIVER_NAME); 109 } catch (ClassNotFoundException e) { 110 e.printStackTrace(); 111 } 112 113 Connection con = null ; 114 PreparedStatement ps = null ; 115 ResultSet rs = null ; 116 117 List<CommentsDto> dtoList = new ArrayList<CommentsDto>(); 118 119 try { 120 121 con = DriverManager.getConnection(JDBC_URL, USER_ID, USER_PASS); 122 123 StringBuffer buf = new StringBuffer(); 124 buf.append("SELECT "); 125 buf.append(" NAME, "); 126 buf.append(" MESSAGE "); 127 buf.append(" FROM "); 128 buf.append(" COMMENTS; "); 129 130 ps = con.prepareStatement(buf.toString()); 131 rs = ps.executeQuery(); 132 133 while (rs.next()) { 134 CommentsDto dto = new CommentsDto(); 135 dto.setName(rs.getString( "NAME" ) ); 136 dto.setMessage(rs.getString( "MESSAGE" ) ); 137 dtoList.add(dto); 138 } 139 140 } catch (SQLException e) { 141 e.printStackTrace(); 142 } finally { 143 144 if (rs != null) { 145 try { 146 rs.close(); 147 } catch (SQLException e) { 148 e.printStackTrace(); 149 } 150 } 151 152 if (ps != null) { 153 try { 154 ps.close(); 155 } catch (SQLException e) { 156 e.printStackTrace(); 157 } 158 } 159 160 if (con != null) { 161 try { 162 con.close(); 163 } catch (SQLException e) { 164 e.printStackTrace(); 165 } 166 } 167 } 168 169 return dtoList; 170 } 171 172} 173

試したこと

  • 他のコードであれば、問題なくデータベースにデータ格納できているので、環境構築は問題ないと思います。
  • mysqlのパスワードはあっています。
  • DAOが怪しいと思っており、Eclipseのデバッグを試しましたが、404エラーが表示されます。(そもそもウェブアプリのデバッグの方法がこれで正しいのかわかっていません。。。)

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

添付のコードは既存の正常に動作するアプリを修正して作成したものです。
元々はバリデーションチェックなど様々な機能がありましたが、
ひとまず最小構成のアプリを作ってみようといろいろと機能を削りました。
(if文にtrueが渡され、分岐が行われないようになっていたりするのはそのような経緯のためです。)

また、初学者のため質問のために必要な情報がこれで足りているかどうかわかりません。
不足があればご指摘いただけたらと思います。

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

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

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

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

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

m.ts10806

2022/07/27 20:21

リクエストを送っているフォームhtmlのあるコードも提示してください。 あと、どのような構成で作られているのかわかりませんが、web.xmlも必要に思います。
ronboo

2022/07/28 12:47

ご回答ありがとうございます。 データベースの中身を表示するためのクラスということでいいでしょうか?それであれば次のものとなります。 ```java package work; import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class ShowAllComment extends HttpServlet { private static final long serialVersionUID = 1L; public ShowAllComment() { super(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //レスポンス(出力データ)の文字コードを設定 response.setContentType("text/html;charset=UTF-8"); //出力用のストリームの取得 PrintWriter out = response.getWriter(); //「survey」テーブルのデータを全件抽出 List<CommentsDto> list = new ArrayList<CommentsDto>(); ShowAllCommentBL logic = new ShowAllCommentBL(); list = logic.executeSelectSurvey(); //HTML文書(回答一覧画面)の出力 out.println( "<html> "); out.println( " <head> "); out.println( " <title>コメント一覧</title> "); out.println( " </head> "); out.println( " <body> "); out.println( " <h2>コメント一覧</h2> "); out.println( " <table class=\"comment_list\" border=1> "); out.println( " <tr bgcolor=\"#c0c0c0\"> "); out.println( " <th>名前</th> "); out.println( " <th>コメント</th> "); out.println( " </tr> "); for (int i = 0; i < list.size(); i++) { CommentsDto dto = list.get(i); out.println( " <tr> "); out.println( " <td>" + dto.getName() + "</td>" ); out.println( " <td>" + dto.getMessage() + "</td>" ); out.println( " </tr> "); } out.println( " </table> "); out.println( " <br> "); out.println( " <a href=\"InputComment\">コメント入力画面に戻る</a> "); out.println( " </body> "); out.println( "</html> "); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } } ``` また、web.xmlはこちらです。 ```xml <?xml version="1.0" encoding="UTF-8"?> -<web-app version="2.5" id="WebApp_ID" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> -<servlet> <servlet-name>InputComment</servlet-name> <servlet-class>work.InputComment</servlet-class> </servlet> -<servlet-mapping> <servlet-name>InputComment</servlet-name> <url-pattern>/InputComment</url-pattern> </servlet-mapping> -<servlet> <servlet-name>SaveComment</servlet-name> <servlet-class>work.SaveComment</servlet-class> </servlet> -<servlet-mapping> <servlet-name>SaveComment</servlet-name> <url-pattern>/SaveComment</url-pattern> </servlet-mapping> -<servlet> <servlet-name>ShowAllComment</servlet-name> <servlet-class>work.ShowAllComment</servlet-class> </servlet> -<servlet-mapping> <servlet-name>ShowAllComment</servlet-name> <url-pattern>/ShowAllComment</url-pattern> </servlet-mapping> </web-app> ```
ronboo

2022/07/28 12:50

すいません、追記ではMarkdown記法ができないんですね汗
jimbe

2022/07/28 17:24

この欄ではなく、質問を編集して追加して下さい。
jimbe

2022/07/28 17:45 編集

>特にエラーが出ているわけではないと思うのですが、 出ているのかいないのか、確認してください。もし出ているのに気がついていないとしたら、無駄な時間を費やすことになります。 >既存の正常に動作するアプリを修正して作成したもの SQL 文の箇所も修正したのでしょうか。 >ウェブアプリのデバッグの方法がこれで正しいのか web のデバッグ方法が分からなくても、 eclipse で新しく java のプロジェクトを作ってそちらにDAO のコードをコピーして試すとかやりようはあるのではないでしょうか。
guest

回答1

0

ベストアンサー

SaveCommentBLクラスのexecuteInsertSurveyメソッドを呼び出していないためです。

SaveComment.java

1SaveCommentBL logic = new SaveCommentBL(); 2succesFlg = logic.executeInsertSurvey(dto);

デバッグのやり方に困ったときは、とりあえずSystem.out.println でコンソール出力してしまうのが手っ取り早いです。
仕事で作るプログラムでは余計な処理が紛れ込んでいると困ってしまいますが、自己学習用のプログラムなら楽さ・素早さ重視で良いかと思います。余裕が出て来たら正当な方法を調べて実践してみてください。

投稿2022/07/31 03:45

ho-ta-te

総合スコア112

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

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

ronboo

2022/12/01 14:00

しばらくプログラミングの勉強から離れていたため、回答が遅くなりすいません。 自分でも何が改善につながったのかわかりませんが、コードをいじっている中で思っている動作をするようになりました。いろいろとご教授いただきありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問