Тёмный

【JavaDB9】WebアプリからDB接続する超シンプルなプログラム 

せかチャン - 世界一わかりやすい情報科チャンネル
Просмотров 11 тыс.
50% 1

Опубликовано:

 

15 окт 2024

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 27   
@pen9u1n_san
@pen9u1n_san 8 месяцев назад
いつも分かりやすい動画をありがとうございます! 動画の通りにならず、実行はできてもshowname.jspファイルのの値がnullになってしまうので質問させてください。 【前提】Eclipseで実行 【自身でコードを変更し、原因の切り分けをした履歴】 ①ShowNameServlet.javaのtryブロックの外にreq.setAttribute("name", "テスト");と入力→nullがテストに変わる。 ②ShowNameServlet.javaのfinallyブロックの中のtryブロックの中にreq.setAttribute("name", "テスト");と入力→nullがテストに変わる。 ③ShowNameServlet.javaのfinallyブロックの後にreq.setAttribute("name", "テスト");と入力→nullがテストに変わる。 ④コピペする際に①//DBに接続〜String name = rs.getString("name");までを消してreq.setAttribute("name", "テスト");と入力→nullがテストに変わる。 ⑤せかチャンJavaDB6〜8の動画内容は問題なくコンソールへ表示されるためeclipseとMySQLとの連携も問題なし。(SELECT * FROM student でちゃんと10人分の登録も確認できます) ⑥String name;をtryブロックの外で定義し、name = rs.getString("name");で実行→finallyブロックの外でreq.setAttribute("name", name);とコードを書くとnameが初期化されていない可能性がありますと出るため、そもそもtryブロックの中で変数nameにデータベースの情報が代入出来ていない様子。(リクエストスコープへデータを預けたりJSPで受け取ること自体は出来ていた) ⑦⑥でやったname = rs.getString("name");をname = "テスト";に変更→初期化されていない可能性がありますと出るため代入が出来ていないか代入したこと自体がなかったことにされてしまっている。 ⑧req.setAttribute("name", name);の箇所をreq.setAttribute("name", "テスト");に変更→テストにはならずnullのまま表示される。 ⑨tryブロックに入る前にString name = "テスト"と初期化して、finallyブロックが終わった後にもreq.setAttribute("name", name);と記載する。→nullがテストに変わる。(こうなるとそもそもtryブロックの中は何が実行されていても処理したデータそのものが消えてしまっている?) 以上のことから、ShowNameServlet.javaの①//DBに接続 〜 String name = rs.getString("name");のどこかしらが原因でデータベースの情報を変数に代入出来ない(⑦⑧⑨を見る限りデータベースの情報じゃなくても、データベースに接続する記述のある箇所と同じブロック内で代入しようとするとnullになってしまうor処理したこと自体がなかったことにされてしまっている)とまでは推測出来たのですが、肝心の原因が分かりません。他のサイトやブログで紹介されているSQLのデータをJSPで表示するプログラムを実践してもデータベースからの代入は全てnullになってしまうのでお手上げ状態です。お忙しいところ恐縮ですが、考えられる原因をいくつかあげて頂くだけでも結構なのでアドバイスお願い致します。
@SekaChan
@SekaChan 8 месяцев назад
コメントありがとうございます。 詳細までしっかり書いてくれたので状況はよく分かりましたが、原因を特定するのは難しいですね。 解決のヒントになりそうなこととして、まず‥ > ⑥ String name; をtryブロックの外で定義し、name = rs.getString("name"); で実行→finallyブロックの外で req.setAttribute("name", name); とコードを書くとnameが初期化されていない可能性がありますと出るため、そもそもtryブロックの中で変数nameにデータベースの情報が代入出来ていない様子。 この場合は、必ず「初期化されていない可能性があります」と表示されますね。 なぜかというと、もしtryブロックに入ってすぐに例外が発生すると処理がfinallyブロックにとぶ可能性があるためです。 つまりプログラムの構成上、req.setAttribute("name", name); でNullPointerExceptionが発生する可能性があることをコンパイラが伝えてくれています。 こういうときは String name = ""; と空文字列で初期化しておくと良いですね。 (なので、「そもそも」~「代入出来ていない様子」の解釈は間違いです) その他気になるのが、プログラムをすべて打ち込んで作っているのか、それとも公開プログラムを使っているのかです。 公開プログラムであれば、(プログラムに原因はないので)環境周りが怪しい気がします。 すべて打ち込んで作っているのであれば、どこかに打ち間違いがある可能性が高いですね。 これまでの経験でいうと、こういうときはSQL文を打ち間違えているケースが多いです。 念のため、確認をしてみてください。
@pen9u1n_san
@pen9u1n_san 8 месяцев назад
@SekaChan ありがとうございます。 String name = "";と空文字列でnul lにしないという発想がなかったのでやってみたいと思います! SQL文は String sql = "SELECT name FROM student WHERE no = 1"; としていて基本的に公開されているプログラムをコピーアンドペーストしているのであまり打ち間違いは考えにくいですが、念の為時間を置いてから再度確認してみますね。 一度SQLとWebアプリの連携について深く調べていきたいと思います。今回もアドバイスありがとうございました!
@user-fn7gv2bl4f
@user-fn7gv2bl4f Год назад
サーブレットの28行目のnext()があるのですが、戻り値でtrueかfalseがあるのになぜ戻り値用のオブジェクトを用意しなくても大丈夫なのですか?例えば Boolean b = rs.next(); みたいな感じです。 確かに今回のプログラムではこのtrueをどこか別のコードで使うようなことはないのですが、戻り値を受け入れる場所がないとコンパイルか実行の時にエラーが出そうなのに出ないのを疑問に思っていたので質問させていただきました。
@SekaChan
@SekaChan Год назад
かさん、コメントありがとうございました! Javaではメソッドの戻り値を変数などで受け取らなくてもコンパイルエラーになりません。 そのため、戻り値用のオブジェクトは用意しなくても大丈夫ですね😄
@user-fn7gv2bl4f
@user-fn7gv2bl4f Год назад
分かりました!ありがとうございます!
@9igon93
@9igon93 Год назад
待ってました。やさしいところからの導入ありがとうございます。また、次の動画を楽しみにしています。
@SekaChan
@SekaChan Год назад
9 igonさん、コメントありがとうございました! 次の動画、もう撮影は終わっているんですが、動画編集ソフトをバージョンアップしたところ処理がものすごーく遅くなっちゃって手こずっています‥😂 予定通りリリースできるようにがんばります!
@七瀬西野-m7v
@七瀬西野-m7v 5 месяцев назад
classesの中にあるサーブレットのコンパイル方法が、ヒトクセあったと思うですが、いつも通りに cdコマンドでclassesまでを指定し、 サーブレットをコンパイルできるでしょうか?
@taroomori152
@taroomori152 Год назад
いつも動画でお世話になっております。 質問ですが、先日質問同様にエクリプスからではどのように操作すればよいのでしょうか? 次回DAOクラスをやるとのことでしたので次回で解決できそうですかね?
@SekaChan
@SekaChan Год назад
Taro Omoriさん、コメントありがとうございました。 エクリプスでwebアプリを作るには、webアプリ用のプロジェクトを作る必要がありますね😄 その方法については、こちらの動画を参考にしてください! ●Eclipseでwebアプリを開発する4ステップ → ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-PXvs02_VM0I.html
@taroomori152
@taroomori152 Год назад
いつもお世話になっております。 ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-PXvs02_VM0I.htmlを参考に実践しましたが エラーになりました。内容は『dbweb/shownameは利用できません。』です。 showname.htmlのformタグのdbweb/shownameが違うのはわかりますが、何を入力していいかわかりません。mysqlはcmdで作業しています。 あと、エクリプスでinitialize.sqlの作成方法は新規→SQLファイルでよろしいでしょうか?
@SekaChan
@SekaChan Год назад
Taro Omoriさん、コメントありがとうございました。 せっかく質問してくれたのに申し訳ないですが、この情報だけでエラーの原因を特定するのは難しいですね💦 おそらくformタグが間違えているのではなく、その先のサーブレットが何らかの理由で動いていない気がします。 その理由はサーブレットのプログラム内にあるのか、ファイルの配置場所にあるのか、または(Eclipseを使っているとあったので)環境まわりに何か問題があるのか‥。 まずは概要欄のプログラムをダウンロードして使ってもらうなどして、エラーの原因を1つずつ絞っていく必要がありそうですね。 (SQLファイルはプログラムに影響を与えないため、どんな作成方法でも大丈夫です)
@user-fn7gv2bl4f
@user-fn7gv2bl4f Год назад
サンプルプログラムを実行してみたところ生徒名がnullで表示されてしまいました。この場合はどんなエラーが考えられますか?
@SekaChan
@SekaChan Год назад
かさん、コメントありがとうございました。 生徒名がnullになってしまう原因はいろいろあるので、この情報だけでは何ともいえないですね💦 公開しているサンプルプログラムをそのまま動かしているのならDB側に原因がありそうですし、自分でプログラムを作ったのならプログラム側に原因(特に多いのはSQL文の誤り)があるのかもしれません。
@user-fn7gv2bl4f
@user-fn7gv2bl4f Год назад
返信ありがとうございます。もう一度最初からやってみたところ無事実行できました。そのあと何回かデータベース内も削除してやり直しても実行出来たので、私自身が何かしら間違っていたみたいです。
Далее
PUBG Mobile СТАЛ ПЛАТНЫМ! 😳
00:31
Просмотров 174 тыс.
PUBG Mobile СТАЛ ПЛАТНЫМ! 😳
00:31
Просмотров 174 тыс.