投稿

10月, 2023の投稿を表示しています

10月30日(月)1、2コマ目

イメージ
今日、やったこと [サンプルアプリケーション]ユーザー登録(Java版) [練習問題]パスワード変更(Java版)  今日のホワイトボード 文字列の空白チェック JavaにはC#のようなクラスメソッドのisNullOrEmpty()がない。 インスタンスメソッドのisEmpty()やisBlank()があるが、クラスメソッドではないため、実行前にnullチェックが必要!! 図 java.lang.Stringの空白チェックメソッド [サンプルアプリケーション]ユーザー登録(Java版) ソースをあげておきます。 [データアクセス]UserDAO.java SQL実行時に発生するエラーのエラーコードはスローされるSQLExceptionのgetErrorCode()で取得できる。 主キー違反(ORA-00001)ならgetErrorCode()は1を返す。 [例外]DupplicateIDException.java IDが重複しているときにスローする検査例外クラス。 [例外]InvalidInviterIDException.java 登録者自身のIDを紹介者として指定したときにスローする検査例外クラス。 [例外]NoInviterException.java 指定された紹介者が存在しないときにスローする検査例外クラス。 [例外]NotFilledException.java 未入力の項目があるときにスローする検査例外クラス。 [プレゼンテーション]IndexSrv.java [プレゼンテーション]index.jsp 次回は 評価用課題をやってもらいます。

10月26日(木)1、2コマ目

イメージ
今日、やったこと Java版例外の使い方 今日のホワイトボード 検査例外と実行時例外 Javaには検査例外と実行時例外がある。 〇検査例外 java.lang.Exceptionを継承したクラス  検査例外をスローするメソッドはthrowsで例外スローを宣言する必要がある 検査例外は必ずキャッチする必要がある => エラー対応を強制する 図 検査例外 〇実行時例外 java.lang.RuntimeExceptionを継承したクラス 実行時例外をスローするメソッドはthrowsで例外スローを宣言する必要なし 実行時例外はキャッチする必要なし 図 実行時例外 例外の使い分け Javaには2種類の例外あるため、下図のように使い分けることにする。 図 Javaの例外の使い分け サンプルアプリケーション作成 .Netでも作成したユーザー登録アプリケーションをJavaでも作成。 〇サーブレットから起動 JSPファイルをWEB-INF/以下に配備。 ブラウザからアクセスできなくなる。 よって、サーブレットからフォワードしてアクセスする。 図 JSPをWEB-INF/以下に配備する => サーブレットからフォワード 〇(直接関係ないが)やめてほしいこと 無駄なインスタンス生成はやめてほしい。 図 無駄なインスタンス生成はやめてほしい 〇ユーザー登録時のエラー 以下のエラーが想定される。 それぞれ、ユーザーに伝えるべきか(伝えてリカバリしてほしい)、伝えてもしょうがないかでどんな手段を使って伝えるかを切り分ける。 図 ユーザー登録時のエラー 次回は 今回は98%くらいまで完成しました。次回完成させます。

10月24日(火)1、2コマ目

今日、やったこと [評価用課題]オークションサイト(.Net版) 今日のホワイトボード 採点して気づいた点を書きました。 1.無駄な変数 2回以上アクセスしないデータのために変数を作らない 以下の変数flgは代入後、1回しか使っていない。 修正版は以下。 2.冗長な処理 同じような処理があちこちにある。 修正版は以下。 3.OracleDataReaderからデータを取り出す これはまずい。実行時エラーになる可能性がある。 SQL実行直後のOracleDataReaderは検索結果の0行目を参照している。 参照先を1行目に移動するにはRead()を実行する必要がある。 検索結果が0行の場合、Read()はfalseを返すだけでエラーにはならない。 修正版は以下。 検索結果の行数とOracleDataReaderのRead() 〇検索結果が常に0行または1行だけ 1回だけ移動すればいいので、  if(reader.Read()) で1回だけ移動すればOK。 〇検索結果が複数行の可能性がある場合 検索結果の1行目から最終行まで移動する必要があるので、  while(reader.Read()) で検索結果の最初から最後まで移動すること。 この場合、検索結果は複数行になるので、結果の格納先はリストにするべき。 〇検索結果は常に1行1列 SQL実行にExecuteQuery()ではなく、ExecuteScalar()を使うほうが便利。 ExecuteScalar()は検索結果を返すのでDataReaderを使って検索結果を取り出す必要がない。ただし、戻り値はobject型。キャストする必要がある。また、検索結果が無い場合はnullを返す。 〇bool型はtrueかfalseだけ bool型を返すメソッドの戻り値で条件分岐をする場合、以下のelse if()は不要。 ifの条件式がfalseの場合は自動的にelseブロックにくる。 〇変数名、メソッド名の接頭語について 変数名やメソッド名に下表の接頭語をつけるケースがある。 名前にあった役割どおりに実装すること。 接頭語 例 役割 ...

10月19日(木)1、2コマ目

今日、やったこと [評価用課題]オークションサイト(.NET版)作成 今日のホワイトボード 今日もひたすら課題をやってもらいました 次回は 多くの方が未完成だったので、次回(10月24日)も課題の時間にします。 次回(10月24日)の2コマ目終了時を締め切りにします。 

10月12日(木)1、2コマ目

今日、やったこと [評価用課題]オークションサイト(.NET版)作成 今日のホワイトボード 今日は課題の時間でした。 締め切りは次回(10月19日(木)2コマ目終了時)です。 

10月10日(火)1、2コマ目

イメージ
今日、やったこと [評価用課題]オークションサイト(C#版)の説明 今日のホワイトボード 課題を出しましたが、今まで話していない内容があるため、ちまちまと説明をしました。 ページ遷移 今までは1ページだけのアプリケーションでしたが、今回は3ページです。 ということで、ページの移動(遷移)が必要です。 今回はリダイレクトによるページ移動を紹介しました。 図 作成したサンプルのイメージ ポイントは OnPost()の戻り値はvoid型からIActionResult型に変更 RedirectToPage(遷移先ページ)の戻り値を返す の2点。 ページ遷移は リダイレクトとフォワードの2種類がある。 リダイレクトはHTTPの機能を使ったやり方。 =>遷移先はどこでもOK フォワードはアプリケーションの機能を使ったやり方。 =>遷移先は同じアプリケーション内   図 リダイレクト 図 フォワード 課題について 課題作成にあたり、シーケンス図とメソッド一覧を配布しました。このとおりに作ってください。 各機能別に処理の流れを話しました。 認証について 認証をするのはServiceクラスのAuthenticate()メソッド。 Authenticate()メソッドは認証のために必要なログイン名とパスワードの組み合わせ件数をUserDAOのGetCount()を使って取得。GetCount()の戻り値は件数。 図 認証のながれ UserDAOのGetCount() ログイン名とパスワードの組み合わせ件数の取得の際、指定ログイン名とパスワードの行を取得=>ループで件数をカウント=>カウント結果を返すはダメ。 もし、これをやった場合は0点。 NotFilledExceptionクラス Exceptionクラスを継承した例外クラス。 図 C#の継承 コンストラクタは1つ。このコンストラクタからスーパークラス(Exceptionクラス)のstring型引数1個のコンストラクタ呼び出し。 商品選択について 選択した商品が応札期限内かチェック。 図 商品選択のながれ 入札について 応札データテーブルに書き込む際、 ①応札データテーブルの対象...

10月5日(木)1、2コマ目

イメージ
今日、やったこと 例外(C#) 今日のホワイトボード Oracleのエラーとエラーコード OracleにはエラーコードORA-xxxxxがある。 ODP.NETの場合、DBアクセス時にエラーが発生すると、OracleException型の例外がスローされる。その例外のNumberプロパティにエラーコードのxxxxxがセットされている。 図 Oracleエラーコード 練習1 パスワード変更 パスワードを変更するソフトを作った。 ソースコードは以下のとおり。 ChangePasswordResultEnum.cs パスワード変更結果を伝えるための列挙型。 PasswordDAO.cs 異常系演習パスワードマスタテーブルにアクセスするためのクラス。 Insert()メソッドでパスワードを登録する。 Index.cshtml.cs 入力チェックに注目。 Index.cshtml 練習2 パスワード変更改造 同じユーザーがすでに登録したパスワードに変更できないようにチェックを追加。 PasswordDAO.cs ユーザーIDとパスワードの組み合わせが何件あるかカウントするメソッドを追加。 Index.cshtml.cs PasswordDAOに追加した件数カウントメソッドを使ってチェック。 次回は 評価用課題を出します。

10月3日(火)1、2コマ目

イメージ
今日、やったこと .Netでの例外 今日のホワイトボード 処理終了時の状態 メソッド終了時は 正常終了 異常終了 の2つに分かれる。この異常終了はさらに 想定内のエラー 想定外のエラー に分かれる。 想定外のエラーももっとよく考えれば想定内のエラーになるため、線引きができない。 そこで、 想定 内 のエラー => 利用者に通知してリカバリしてほしい(できる)エラー 想定 外 のエラー => 利用者に通知してもなにもできないエラー と再定義する。 図 想定内のエラー、想定外のエラー エラーを伝えるには メソッド呼び出し元になにかを伝える手段は 戻り値 例外スロー の2種類がある。これをメソッドの結果に応じて使分ける。 〇想定内のエラー(利用者に通知してリカバリしてほしいエラー)   戻り値で通知 〇想定外のエラー(利用者に通知してもしょうがないエラー)   例外スローで通知 ※この指針はこの授業内でのルールとします。世間一般的な絶対的なルールではありません。 図 呼び出し元に通知する手段 例外がスローされたときは やってはいけないこと => 例外をキャッチしてなにもしない これは絶対守ること。 図 例外がスローされたとき OracleException ODP.NETでオラクルDBにアクセスする際、エラーが起きるとOracleExceptionがスローされる。その例外のNumberプロパティにはOracleのエラーコードがセットされている。 ...