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

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

ただいまの
回答率

90.61%

  • Java

    13526questions

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

  • SQL

    2329questions

    SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Javaの添削をお願いします。

受付中

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 789

yk-211

score 31

さらに追記します。
if (request.getParameter("deleteFlag") == "0") {
                // 更新処理
                return this.doUpdate(request, con);
            } else {
                // 削除処理
                return this.doDelete(request, con);
            }
としてみたのですが更新の場合、削除の場合ともにDELETE文を呼んでしまいます。deleteFlagには初期値で0が入っています。


追記です。
if (request.getParameter("update") != null) {
                // 更新処理
                return this.doUpdate(request, con);
            } else {
                // 削除処理
                return this.doDelete(request, con);
            }
の部分の("update") != null)を("deleteFlag") == 0)
とするとうまくいくと思うのですがString型とint型のため
値をこのまま入れることが出来ません。
うまく入れるためにはどうしたらよろしいでしょうか。



前提・実現したいこと

こんにちは。
質問をさせてください。

ただいまSQLに接続するJavaのソースを書いておりまして、DELETEを実行した際に
UPDATEを実行するようになってしまっております。
おそらく45行目のあたりからが特に怪しいのですが、どのように直してもうまくいきません。
もしお分かりになる方がおられましたら、長いソースになりますがよろしくお願いいたします。かなり省略しています。

ソースコード

public class CustomerDetail extends AbstractBizLogic {
    private static final long serialVersionUID = 1L;

    /** リクエストURL */
    private String requestPageUrl = "/page/customerDetail.jsp";

    /** 一覧表示画面URL */
    private String customerListUrl = "/page/customerList.jsp";

    /**
     * コンストラクタ
     */
    public CustomerDetail() {
        super();
    }

    /**
     * @see common.AbstractBizLogic#getRequestPageUrl()
     */
    protected String getRequestPageUrl() {
        return requestPageUrl;
    }

    /**
     * @see common.AbstractBizLogic#execute(HttpServletRequest,HttpServletResponse,
     *      Connection)
     */
    protected ProcessResult execute(HttpServletRequest request,
            HttpServletResponse response, Connection con) throws Exception {
        if (request.getParameter("backList") != null) {
            // 一覧へ戻る
            ProcessResult result = new ProcessResult();
            result.setUrl(customerListUrl);
            result.setNormalEndFlg(true);

            super.setSessionAttribute("id", "");
            super.setSessionAttribute("name", "");
            super.setSessionAttribute("kana", "");
            super.setSessionAttribute("gender", "");

            return result;
        }

        if (request.getParameter("processType") == null) {
            // 登録画面初期表示
            return createInsertModoResult();
        } else if (request.getParameter("processType").equals("disp")) {
            // 更新・削除初期表示
            return this.doDispDetails(request, con);
        } else if (request.getParameter("processType").equals("insert")) {
            // 登録処理
            return this.doInsert(request, con);
        } else if (request.getParameter("processType").equals("update")) {
            if (request.getParameter("update") != null) {
                // 更新処理
                return this.doUpdate(request, con);
            } else {
                // 削除処理
                return this.doDelete(request, con);
            }
        } else {
            ProcessResult result = new ProcessResult();
            result.setUrl(requestPageUrl);
            result.setNormalEndFlg(false);

            // 処理モードをセットする。
            super.setSessionAttribute("processType", "");
            super.setErrMsg("不正なアクセス");
            return result;
        }
    }

    /**
     * ユーザーマスタ情報を検索し詳細画面表示します。
     *
     * @param request
     *            リクエスト情報
     * @param con
     *            コネクション
     * @return 処理結果DTO
     * @throws Exception
     */
    private ProcessResult doDispDetails(HttpServletRequest request,
            Connection con) throws Exception {
        ProcessResult result = new ProcessResult();
        String id = request.getParameter("id");
        List<CustomerDto> retList = this.getCustomerList(id, con);
        if (retList.size() == 0) {
            super.setErrMsg("データがすでに削除された可能性があります。再度検索してください。");
            // 一覧検索画面に戻す。
            result.setUrl(customerListUrl);
            result.setNormalEndFlg(false);

            return result;
        }
        CustomerDto dto = retList.get(0);
        super.setSessionAttribute("id", dto.getId());
        super.setSessionAttribute("name", dto.getName());


        // 処理モードをセットする。
        super.setSessionAttribute("processType", "update");
        result.setUrl(requestPageUrl);
        result.setNormalEndFlg(true);
        return result;
    }

    /**
     * ユーザーマスタの新規登録を行います。
     *
     * @param request
     *            リクエスト情報
     * @param con
     *            コネクション
     * @return 処理結果DTO
     * @throws Exception
     */
    private ProcessResult doInsert(HttpServletRequest request, Connection con)
            throws Exception {
        ProcessResult result = new ProcessResult();

        String id = request.getParameter("id");
        String name = request.getParameter("name");


        boolean errExistsFlg = false;
        // 必須チェック
        if (StringUtils.isBlank(id)) {
            super.setErrMsg("IDは必ず入力してください。");
            errExistsFlg = true;
        }
        if (StringUtils.isBlank(name)) {
            super.setErrMsg("名前は必ず入力してください。");
            errExistsFlg = true;
        }
        if (StringUtils.isBlank(kana)) {
            super.setErrMsg("フリガナは必ず入力してください。");
            errExistsFlg = true;
        }
        if (StringUtils.isBlank(height)) {
            super.setErrMsg("身長は必ず入力してください。");
            errExistsFlg = true;
        }
        if (StringUtils.isBlank(weight)) {
            super.setErrMsg("体重は必ず入力してください。");
            errExistsFlg = true;
        }
        if (StringUtils.isBlank(birthday)) {
            super.setErrMsg("生年月日は必ず入力してください。");
            errExistsFlg = true;
        }



        if (errExistsFlg) {
            // 入力チェックでエラーの場合は処理終了
            result.setNormalEndFlg(false);
            return result;
        }
        /***
         * //ID存在チェック List<CustomorDto> retList = this.getCustomerList(id, con);
         * if (retList.size() == 0) {
         * super.setErrMsg("データがすでに削除された可能性があります。再度検索してください。");
         * result.setNormalEndFlg(false); return result; }
         */

        CustomerDto paramDto = new CustomerDto();
        paramDto.setId(id);
        paramDto.setName(name);
        paramDto.setKana(kana);
        paramDto.setGender(gender);


        CustomerUpdateDao updateDao = new CustomerUpdateDao();
        updateDao.setParam(paramDto);
        updateDao.execute(con);

        super.setSessionAttribute("id", id);
        super.setSessionAttribute("name", name);
        super.setSessionAttribute("kana", kana);


        result.setMsg("削除が完了しました。");
        result.setUrl(requestPageUrl);
        result.setNormalEndFlg(true);


        return result;

    }

    /**
     * ユーザーマスタの削除を行います。
     *
     * @param request
     *            リクエスト情報
     * @param con
     *            コネクション
     * @return 処理結果DTO
     * @throws Exception
     */
    private ProcessResult doDelete(HttpServletRequest request, Connection con)
            throws Exception {
        ProcessResult result = new ProcessResult();
        result.setUrl(requestPageUrl);
        // 処理モードをセットする。
        super.setSessionAttribute("processType", "update");

        String id = request.getParameter("id");
        String name = request.getParameter("name");
        String kana = request.getParameter("kana");

        /***
         * ID存在チェック List<CustomorDto> retList = this.getUserList(id, con); if
         * (retList.size() == 0) {
         * super.setErrMsg("データがすでに削除された可能性があります。再度検索してください。");
         * result.setNormalEndFlg(false); return result; }
         */

        CustomerDto paramDto = new CustomerDto();
        paramDto.setId(id);
paramDto.setAddress(address);
        paramDto.setPhone(phone);
        paramDto.setDeleteFlag(deleteFlag);

        CustomerDeleteDao deleteDao = new CustomerDeleteDao();
        deleteDao.setParam(paramDto);
        deleteDao.execute(con);

        super.setSessionAttribute("id", id);
        super.setSessionAttribute("phone", phone);
        result.setMsg("削除が完了しました。");
        result.setUrl(requestPageUrl);
        result.setNormalEndFlg(true);

        return result;
    }

    /**
     * ユーザーマスタの削除を行います。
     *
     * @param request
     *            リクエスト情報
     * @param con
     *            コネクション
     * @return 処理結果DTO
     * @throws Exception
     */
    private ProcessResult createInsertModoResult() {
        // 新規登録表示
        ProcessResult result = new ProcessResult();
        result.setUrl(requestPageUrl);
        result.setNormalEndFlg(true);

        super.setSessionAttribute("id", "");
        super.setSessionAttribute("name", "");
        super.setSessionAttribute("kana", "");
        super.setSessionAttribute("phone", "");
        // 処理モードをセットする。
        super.setSessionAttribute("processType", "insert");
        return result;
    }

    /**
     * ユーザーマスタを検索しリストをかえします。
     *
     * @param id
     *            ユーザーID
     * @param con
     *            コネクション
     * @return ユーザーマスタDTOリスト
     * @throws Exception
     */

    private List<CustomerDto> getCustomerList(String id, Connection con)
            throws Exception {
        CustomerDto paramDto = new CustomerDto();
        paramDto.setId(id);

        CustomerSelectDao dao = new CustomerSelectDao();
        dao.setParam(paramDto);
        dao.execute(con);
        return dao.getResultList();

###補足情報(言語/FW/ツール等のバージョンなど)
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

0

45行目てどこですか^^;

System.out.println( request ); // requestの中身を見た方がいいですね。

if (request.getParameter("update") != null) {
                // 更新処理
                return this.doUpdate(request, con);
            } else if(request.getParameter("delete") != null) { ← 入れた方がいいですね。
                // 削除処理
                return this.doDelete(request, con);
            }

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/06/10 18:00

    回答ありがとうございます。
    分かりづらく申し訳ありませんでした。
    MasaakiIrie様の指摘していただいているそちらの部分が問題だと思いますが、
    まずはrequestの中を見てみます。
    ありがとうございます。

    キャンセル

0

if (request.getParameter("update") != null) {
    // 更新処理
    return this.doUpdate(request, con);
} else {
    // 削除処理
    return this.doDelete(request, con);
}
DELETEのはずなのにUPDATEになるということは、上記部分のifの判定が怪しいですね。
デバッグやprintlnでrequest.getParameter("update")を確認し、UPDATE、DELETEそれぞれどのような値が格納されているか見てみましょう。

Javaの文字列の比較は慣れないとわかりづらいかもしれません。参考:Javaでの比較

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/06/10 17:58

    ありがとうございます。
    そこの部分でdeleteFlagに1が入ったときはdeleteになるようにするとうまくいきそうで、
    if (request.getParameter("deleteFlag") == 0)としたいのですが、String型とint型のためうまくいかないようです。
    どのようにしたらうまくいきますでしょうか。

    キャンセル

0

文字列の比較には通常、equalを使用します。
if (request.getParameter("deleteFlag").equal("0"))

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/06/10 19:21

    回答ありがとうございます。
    おっしゃるとおりです、忘れておりました。
    そちらでやってみたところ、UPDATEが動きませんでした。

    キャンセル

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

  • ただいまの回答率 90.61%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    ファイルアップロード

    ファイルアップロードのapi作成についての質問です。 ローカルにあるファイルをアップロードし、その中身のテキストをデータベースのテーブルの指定位置に書き込むことは可能でしょうか。

  • 解決済

    Javaの添削をお願いします。

    JSPファイルが間違っているため条件式で分岐できないのではないか との指摘を受けましたのでJSPファイルを添付させていただきます。 もし分かる方がいらっしゃったらご回答をよろしくお

  • 解決済

    リストに入ったオブジェクトをJSPに渡し、JSTLで表示させたい

    ソースすべてです。 ☆Sample01.java------------------------------------------------ package sample.p

  • 受付中

    掲示板入力フォームチェック後の投稿処理判定

    背景・実現したいこと javaを使って、簡易掲示板を作成しています。 ところが、入力チェックのロジックは完成しているのですが、エラーメッセージがあるときだけ、 投稿処理を停止

  • 解決済

    境界型ジェネリクスで型を取得したい

    お世話になっております。 Daoクラスをテンプレート化するために親クラスを作成しているのですが 境界型ジェネリクスで型を指定する際に以下のEからどのように型を取得すればいいので

  • 解決済

    継承時のthisの働き

    こんにちは。現在Javaについて勉強しています。 今回はその継承に関して、調べてもよくわからない点があったので質問させてください。 見て頂きたいのは以下のコードです。 clas

  • 受付中

    JAVAの掲示板作成

    JAVAで掲示板を作成しているが、ファイルに書き込めるが、nullと表示されているので、原因を教えてください。 BoardSevlet.java import java.i

  • 解決済

    JSPでテーブルを更新画面で更新したいのですが

    一覧画面(employeelist.jsp)でラジオボタンでテーブルの行を選択して、 更新ボタンを押し、更新画面(update.jsp)遷移させ、 そこで選択した行の情報を更新した

同じタグがついた質問を見る

  • Java

    13526questions

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

  • SQL

    2329questions

    SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。