Skip to main content

5 更新機能実装

追記、作成対象ファイル

  • ItemDao.java
  • UpdateItem.java
  • EditServlet.java

詳細

商品変数画面にて入力した商品情報DBに反映する機能を実装する

  • 商品更新機能を定義する(ItemDao.java)
  • DB操作インターフェースを実装する商品更新クラスを作成する (UpdateItem.java)
  • サーブレットに振り分け処理を追記する(editServlet.java)
  • 動作確認

ItemDao.java

ItemDao.javaに以下のメソッドを追加します

updateメソッド
項目内容
アクセス修飾子public
戻り値int
メソッド(引数)update(ItemDto dto)
throwsSQLException
仕様引数に受取る『dto』の持つフィールドを一つずつSQL文に組み込み、DBに更新処

以下の手順で機能を実装してください

  • クラス直下で宣言した変数『sql』に文字列” update item set name = ?, category = ?, price = ? where code = ?”を代入
  • int型の変数『n』を宣言し、0を代入
  • try句とfinally句を用意する

tryブロック内に以下を記述

  • クラス直下で宣言した変数『con』のメソッド『prepareStatement』の引数に上記の変数『sql』を渡し、その戻り値をクラス直下で宣言した変数『ps』に代入
  • 変数『ps』のメソッド『setString』の第一引数に『1』、代二引数に引数『dto.getName()』を渡して実行
  • 変数『ps』のメソッド『setString』の第一引数に『2』、代二引数に引数『dto.getCategory()』を渡して実行
  • 変数『ps』のメソッド『setInt』の第一引数に『3』、代二引数に引数『dto.getPrice()』を渡して実行
  • 変数『ps』のメソッド『setInt』の第一引数に『4』、代二引数に引数『dto.getCode()』を渡して実行
  • 変数『ps』のメソッド『exceteUpdate』の戻り値を変数『n』に代入

以上でtryブロックは閉じます
finallyブロック内に以下を記述

  • 『ps.close();』を記述(リソースの開放)

以上でfinallyブロックは閉じます

  • 最後に変数『n』を戻り値として返します

 

UpdateItem.java

作成したUpdateItem.javaに以下のメソッド記を定義(オーバーライド)します

executeメソッド
項目内容
アクセス修飾子public
戻り値void
メソッド(引数)execute(HttpServletRequest request)
throwsSQLException
仕様daoオブジェクトを用い、更新処理を行ってその結果によってjspでの表示を振り分ける

以下の手順で機能を実装してください

  • ItemDaoクラスの変数『dao』を宣言し、『null』を代入
  • int型の変数『n』を宣言し、『0』を代入
  • int型の変数『code』を宣言し、『request.getParameter(“code”)』の戻り値を数値変換して代入
  • String型の変数『name』を宣言し、『request.getParameter(“name”)』の戻り値を代入
  • String型の変数『category』を宣言し、『request.getParameter(“category”)』の戻り値を代入
  • String型の変数『price』を宣言し、『request.getParameter(“price”)』の戻り値を代入
  • 『name == null』又は『name.isEmpty()』又は『price == null』又は『price.isEmpty()』又は『!Judge.isNumber(price)』という条件がtrueだった場合は以下の処理を行う。
    →『request.setAttribute(“message”, “入力が不正です”);』を記述する。
    →『return;』を記述
  • ItemDtoクラスの変数『dto』を宣言し、ItemDtoクラスをインスタンス化して代入
  • 変数『dto』のメソッド『setCode』の引数に変数『code』を渡して実行
  • 変数『dto』のメソッド『setName』の引数に変数『name』を渡して実行
  • 変数『dto』のメソッド『setCategory』の引数に変数『category』を渡して実行
  • 変数『dto』のメソッド『setPrice』の引数に変数『price』を数値変換したものを渡して実行

tryブロック内に以下を記述

  • 変数『dao』にItemDaoクラスをインスタンス化して代入
  • 変数『dao』のメソッド『update』の引数に変数『dto』を渡し、その戻り値を変数『n』に代入
  • 変数『n』が『0』より大きい場合、
    →『request.setAttribute(“message”, “商品の編集が完了しました”);』を記述
  • それ以外の場合→『request.setAttribute(“message”, “商品の編集に失敗しました”);』を記述

以上でtryブロックは閉じます

  • 『finallyブロック内には『if(dao != null) dao.close();』を記述

以上でfinallyブロックは閉じます

EditServlet.java

EditServlet.javaのdoPostメソッドを完成させます

doPostメソッド

DeleteServletのdoPostメソッドと処理はほとんど同じなので、それを参考に必要箇所を変更して完成させましょう

以上で更新機能の実装は完了です

動作確認

以上で課題は終わりです

こちら を参考に、全ての機能が正常に動作するかを確認してみましょう!