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

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

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

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

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

Q&A

解決済

2回答

1909閲覧

登録したデータがNULLとして登録されてしまいます。

Marina_

総合スコア14

Java

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

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

0グッド

0クリップ

投稿2021/08/14 04:15

編集2021/08/14 04:25

■ 困っていること
登録画面から登録したデータがNULLとしてDBに登録されてしまいます。
全てのファイルを上から下まで読み、文法とスペルミスを確認しましたが、見つけられませんでした。
恐れ入りますが、原因箇所の特定の仕方についてご教示いただけたら嬉しいです。
よろしくお願いいたします。

■ 開発環境
環境:
・macOS Big Sur 11.4
・Pleiades All in One (Eclipse 2019-12)
・MySQL 8.0.25
・DBeaver 21.1.0

■ Githubのレポジトリ
https://github.com/Marina-fruits/Dairy-Reflection/tree/master/src/work

■ 作りたい機能
・【登録画面】4つのテキストボックスに、値を入れてDBに登録する。
・【一覧画面】登録した値が一覧として表示される。
・【ログイン画面】IDとPWがDBの値と一致すれば、ログインし、【登録画面】を表示することができる。

■ 起きている問題
・【登録画面】で登録した内容が、DBにNULLとして登録されてしまう。

■ エラーメッセージ

txt

1重大: サーブレット [ShowAllRecords] のServlet.service()が例外を投げました [土 8月 14 11:35:23 JST 2021]

eclipseのコンソールに出ています。サーバー起動メッセージの直後に出ているのは、この一文だけです。
また、この一文以外は、「重大」ではなく「情報」と書かれています。
このエラーメッセージで検索を行なったところ、「doPostメソッドの実装に誤りがある」ことが原因の一つとして挙げられていましたが、
私のdoPostメソッドに誤りが確認できませんでした。
https://teratail.com/questions/118925

■ 解決のために行ったこと
どのファイルに原因がありそうかを考えました。

txt

1◯・・・原因ではないと思われるファイル 2△・・・原因かもしれないファイル 3×・・・原因である可能性が高いと考えているファイル 4 51:【◯】InputRecords.java|HTML出力 62:【×】SaveRecords.java| リクエストの受け取り 7→受け取った「あ」などの値がNULLになってしまっている 83:【◯】SaveRecordsBL.java|  DAO(RecordsDao)呼び出し 94:【◯】RecordsDao.java|  doInsertメソッド実行 105:【◯】REFLECTIONテーブル insert実行 116:【△】RecordsDao.java|  dtoListをRecordsDtoに返す 12→2で直らなければ、ここも間違えている可能性あり 137:【△】RecordsDto.java|   SaveRecordsBLに返す 14→2で直らなければ、ここも間違えている可能性あり 158:【◯】SaveRecordsBL.java|  DB操作成功フラグをSaveRecordsに返す 169:【◯】SaveRecords.java|  テーブルに登録し、成功or失敗画面に遷移する

2のリクエストの受け取りを行っている箇所のコードを確認しましたが、誤りを見つけられませんでした。
他のファイルも全て上から下まで文法とスペルミスを確認しましたが、見つけられませんでした。

Java

1//リクエストパラメータを取得 2String initiative = request.getParameter("INITIATIVE"); //リクエストパラメータ(INITIATIVE) 3String accomplishment = request.getParameter("ACCOMPLISHMENT"); //リクエストパラメータ(ACCOMPLISHMENT) 4String to_improve_work = request.getParameter("TO_IMPROVE_WORK"); //リクエストパラメータ(TO_IMPROVE_WORK) 5String to_improve_commu = request.getParameter("TO_IMPROVE_COMMU"); //リクエストパラメータ(TO_IMPROVE_COMMU) 6 7//毎日の記録データ(RecordsDto型)の作成(今回リクエストパラメータで受け取った値を変数に入れていく) 8RecordsDto dto = new RecordsDto(); 9dto.setInitiative( initiative ); 10dto.setAccomplishment( accomplishment ); 11dto.setTo_improve_work( to_improve_work ); 12dto.setTo_improve_commu( to_improve_commu ); 13dto.setTime( new Timestamp(System.currentTimeMillis()) ); //現在時刻を更新時刻として設定

■ javaファイル内のコメントについて
教材のファイルを書き換えたものであり、所々、RecordsであるべきところがSurveyになっているところがあります。
Surveyは、Recordsに読み直していただけると嬉しいです。
(現在、GithubのPATを設定中で、完了次第gitにアップします。)

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

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

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

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

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

shinami

2021/08/14 05:06

initiativeには値が入ってこないのでしょうか? System.out.println(initiative); などとして確認して見てはどうでしょう。 もう1つ確認してほしい事があります。postした時に日付も送ることになっていますが、 String date = request.getParameter("DATE"); System.out.println(date); などとしてdateに値が入ってくるかどうか。 そうではなく、initiativeには値は入ってきておりデータベースへ登録する所で問題があるのでしょうか? また、String initiative = request.getParameter("INITIATIVE"); の行までプログラムは進んでいる感じですか?
shinami

2021/08/14 05:40

もし、dateに日付が入ってくるなら、 String message = request.getParameter("MESSAGE"); System.out.println(message); を実行して見てください。
Marina_

2021/08/14 06:00

shinamiさん ご教授いただき、誠にありがとうございます。 値を確認したところ、initiativeはnullで、dateは本日の日付がコンソールに表示されました。 パラメータ取得のところからつまづいているようです。 リクエストパラメータの取得方法について検索したところ、テキストボックスのname属性と、request.getParameter("INITIATIVE"); のダブルクオーテーション内の値が紐づいており、そこを間違えて記述していました。 name属性を修正し、コンソールでinitiativeの値を受け取ることができるようになりました。 それから、DBに登録されるようになりましたが、一覧には表示されていないため、もう一度講座を復習して、どの変数がどのファイル間で受け渡しされているのかを理解してから、再度取り組みたいと思います。 理解不足なまま、ご質問してしまい、申し訳ございませんでした。 ご回答いただき、誠にありがとうございました。
shinami

2021/08/14 06:10

やはりそうでしたか。id属性では送れずname属性で送れるという事ですね。 どの辺りまでプログラムが進んでいるか、何の値が入っているか確認するには、 ブレークポイントとデバッグ機能で値を確認する方法とSystem.out.println("文字");の様になにか文字を表示させてみる手もありますのでやりやすい方で確認しながら進めると良いのではないかと思います。
Marina_

2021/08/14 07:08

shinamiさん 一覧に表示されていないのは、1件目から6件目までのデータが全てNULLで登録されたままだったためでした。 DBから値をNULLから「テスト」に変え、その後画面から登録したところ、一覧に登録した値が表示されるようになりました。 大変ご貴重なお時間の中、ご教授いただき、誠にありがとうございました。
shinami

2021/08/14 07:31

なるほど、そういう事でしたか。 NULLで登録しないようにするようにするのも良いかもしれませんね。 データベース側でNULLを受け付けない様にするか、プログラムで対応する方が良いかはまた考えて見てください。もしくは、NULLの方が都合が良いか。
guest

回答2

0

2のリクエストの受け取りを行っている箇所のコードを確認しましたが、誤りを見つけられませんでした。

他のファイルも全て上から下まで文法とスペルミスを確認しましたが、見つけられませんでした。

コードやスペルがどうこうより想定の個所で想定の値がちゃんと来ているかデバッグすべきでは。

投稿2021/08/14 04:57

m.ts10806

総合スコア80861

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

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

Marina_

2021/08/14 06:03

m.ts10806 さん ご教授いただき、誠にありがとうございます。 はい。おっしゃる通り、箇所をファイルではなく最小単位の機能ごとに特定し、デバッグするべきでした。 デバッグの仕方についても知識がほとんどないため、これから勉強します。 本件について、値を確認したところ、initiativeはnullで、dateは本日の日付がコンソールに表示されました。 パラメータ取得のところからつまづいているようです。 リクエストパラメータの取得方法について検索したところ、テキストボックスのname属性と、request.getParameter("INITIATIVE"); のダブルクオーテーション内の値が紐づいており、そこを間違えて記述していました。 name属性を修正し、コンソールでinitiativeの値を受け取ることができるようになりました。 それから、DBに登録されるようになりましたが、一覧には表示されていないため、もう一度講座を復習して、どの変数がどのファイル間で受け渡しされているのかを理解してから、再度取り組みたいと思います。 理解不足なまま、ご質問してしまい、申し訳ございませんでした。 ご回答いただき、誠にありがとうございました。
Marina_

2021/08/14 07:11

上記、一覧に表示されない件は、勘違いで解決しました。 大変ご貴重なお時間の中、ご教授いただき、誠にありがとうございました。 ご回答を御二方からいただき、どちらもベストアンサーとして登録したかったのですが、時間の先だったご回答をベストアンサーとさせていただきました。
m.ts10806

2021/08/14 07:45 編集

「参考書の通りにやること」が目的になってるんじゃないでしょうか。
Marina_

2021/08/14 07:55

はい。参考書を書き換えれば上手くいくはず、と思ってしまっています。 一つ一つの機能の理解が曖昧なまま動作確認してしまうので、ひとたび動かなくなると、解決方法を見つけるのが、砂漠の中から一粒の金を見つけるほど途方もない状態になっていると思います。 一つ一つの機能の意味を自分の言葉で説明できないと、いつまでのこの状態のままだと思うので、理解して、エラー特定の精度を上げることを目的に頑張ります。 ご指摘いただき、誠にありがとうございました。
m.ts10806

2021/08/14 08:55 編集

プログラムは書いた通りにしか動かない ということは認識しておいてください。 それに実際の現場では参考書なんてないです。設計にそった実装を自分で考えなければなりません。
Marina_

2021/08/15 00:39

はい。ありがとうございます。 そうですね。 参考書での勉強が終わったら、現場でそうできるように、実際の現場の方法に近い方法で開発してみます。 ご助言をいただき、ありがとうございます。
guest

0

ベストアンサー

まずは、登録するときにそいつがNULLではない、というのを確認しましょう

なんかしらんけどNULLになってしまっている、というばあいは、なぜそれがNULLになってるのか原因を探っていきます

投稿2021/08/14 04:56

編集2021/08/14 04:59
y_waiwai

総合スコア87800

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

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

Marina_

2021/08/14 06:04

y_waiwaiさん ご教授いただき、誠にありがとうございます。 はい。おっしゃる通り、どこが間違えていそう、というのではなく、NULLの原因特定をするべきでした。 本件について、値を確認したところ、initiativeはnullで、dateは本日の日付がコンソールに表示されました。 パラメータ取得のところからつまづいているようです。 リクエストパラメータの取得方法について検索したところ、テキストボックスのname属性と、request.getParameter("INITIATIVE"); のダブルクオーテーション内の値が紐づいており、そこを間違えて記述していました。 name属性を修正し、コンソールでinitiativeの値を受け取ることができるようになりました。 それから、DBに登録されるようになりましたが、一覧には表示されていないため、もう一度講座を復習して、どの変数がどのファイル間で受け渡しされているのかを理解してから、再度取り組みたいと思います。 理解不足なまま、ご質問してしまい、申し訳ございませんでした。 ご回答いただき、誠にありがとうございました。
Marina_

2021/08/14 07:11

上記、一覧に表示されない件は、勘違いで解決しました。 大変ご貴重なお時間の中、ご教授いただき、誠にありがとうございました。
y_waiwai

2021/08/14 07:22

がんばってください。こういうトラブルを自分で克服していくことこそ経験となりスキルとなります ベテランやプロと言っても、間違いのないコードはいきなり書けません。 初心者と違うところは、おかしくなったときに、おかしくさせている原因を追いかけていける能力がある、ってところです
Marina_

2021/08/14 07:59 編集

そうなのですね。 今私は、おかしくさせている原因を、やみくもに実験のようなスタイルで特定しようとしてしまっています。 原因は、1変数や1文ごとの意味を理解できていないからだと思います。 早く色々作れるようになりたいので、今後気をつけて、頑張ります! ご指導いただき、誠にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問