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

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

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

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

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

SQL

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

Q&A

解決済

2回答

14810閲覧

SQL 論理削除のSQL文・JSPの書き方について教えてください。

yk-211

総合スコア34

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

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

SQL

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

0グッド

0クリップ

投稿2015/06/08 08:33

###前提・実現したいこと
分からないことがありますので、質問させてください。
JavaでDB接続をして顧客情報管理の練習をしています。
実際にINSERT文を書いて顧客の登録をすることが出来ました。

そして次に、現在初期値の0になっているDELETEFLAGを
JSPのチェックボックスにチェックを入れて1にし、
選択された顧客を論理削除をしなければいけません。
JavaでSQL文を書いておりましたが、論理削除のSQL文を
どのように書いたらいいのか分からず質問させていただきました。
また、JSPでチェックが入ったときに1になる、というのも書きたいのですが
現在まだ出来ておりません。
どちらも添付させていただきますので、
分かる方がいらっしゃいましたら、回答をお願いいたします。

###ソースコード

lang

1 2import java.sql.PreparedStatement; 3import java.sql.SQLException; 4 5import common.AbstractUpdateDao; 6 7import customer.dto.CustomerDto; 8 9 10public class CustomerDeleteDao extends AbstractUpdateDao { 11 12 /** 登録kパラメーターユーザーDTO */ 13 private CustomerDto param = null; 14 15 /** 16 * コンストラクタです。 17 */ 18 public CustomerDeleteDao() { 19 super(); 20 } 21 22 /** 23 * 実行SQL文字列を返します。 24 * 25 * @return SQL文字列 26 */ 27 protected String getSql() { 28 StringBuilder strBuilder = new StringBuilder(); 29 strBuilder.append("delete from customer "); 30 strBuilder.append("where CustomerID = ?; "); 31 return strBuilder.toString(); 32 } 33 34 /** 35 * プリペアーステートメントをセットします。 36 * 37 * @param ps 38 * @throws SQLException 39 */ 40 protected void setPreparedStatement(PreparedStatement ps) 41 throws SQLException { 42 43 ps.setString(1, this.param.getId()); 44 return; 45 } 46 47 /** 48 * 検索条件パラメーターをセットします。 49 * 50 * @param param 51 */ 52 public void setParam(CustomerDto param) { 53 this.param = param; 54 } 55}

lang

1<%@ page language="java" contentType="text/html; charset=EUC_JP" 2 pageEncoding="Windows-31J"%> 3<%@ taglib prefix="c" uri="/WEB-INF/tld/c.tld" %> 4<%@ taglib prefix="fn" uri="/WEB-INF/tld/fn.tld" %> 5<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 6<html> 7<head> 8<meta http-equiv="Content-Type" content="text/html; charset=EUC_JP"> 9<c:import url="./head.jsp" /> 10<link rel="stylesheet" type="text/css" href="../css/customer.css"> 11 12<title>編集画面</title> 13</head> 14<body> 15 16 <form action="./CustomerDetail" method="post"> 17 <table> 18 <tr> 19 <th>顧客ID</th> 20 <td> 21 <c:choose> 22 <c:when test="${processType == 'insert'}"> 23 <input type="text" name="id" size="12" value="${id}"> 24 25 </c:when> 26 <c:otherwise> 27 <c:out value="${id}"/> 28 <input type="hidden" name="id" value="${id}"> 29 </c:otherwise> 30 </c:choose> 31 </td> 32 </tr> 33 <tr> 34 <th>顧客漢字名</th> 35 <td><input type="text" name="name" size="20" value="${name}"></td> 36 </tr> 37 <tr> 38 <th>顧客カナ名</th> 39 <td><input type="text" name="kana" size="20" value="${kana}"></td> 40 </tr> 41 <tr> 42 <th>性別</th> 43 <td><select name="gender"><OPTION value="${0}" >男性</OPTION> 44 <OPTION value="${1}">女性</OPTION></select></td> 45 </tr> 46 <tr> 47 <th>身長</th> 48 <td><input type="text" name="height" size="12" value="${height}">cm</td> 49 </tr> 50 <tr> 51 <th>体重</th> 52 <td><input type="text" name="weight" size="12" value="${weight}">kg</td> 53 </tr> 54 <tr> 55 <th>生年月日</th> 56 <td><input type="text" name="birthday" size="12" value="${birthday}"></td> 57 </tr> 58 <tr> 59 <th>郵便番号</th> 60 <td><input type="text" name="zipCode" size="14" value="${zipCode}">(ハイフン無しで入力してください)</td> 61 </tr> 62 <tr> 63 <th>住所</th> 64 <td><input type="text" name="address" size="40" value="${address}"></td> 65 </tr> 66 <tr> 67 <th>電話番号</th> 68 <td><input type="text" name="phone" size="14" value="${phone}">(ハイフンありで入力してください)</td> 69 </tr> 70 <tr> 71 <th>削除</th> 72 <td><input type="checkbox" name="deleteFlag" size="12" value="${deleteFlag}"></td> 73 </tr> 74 75</table> 76<br> 77 78<c:choose> 79 <c:when test="${processType == 'insert'}"> 80 <input type="submit" value="OK" name="insert" /> 81 <input type="hidden" name="processType" value="insert"> 82 </c:when> 83 <c:otherwise> 84 <input type="submit" value="OK" name="update" />>&nbsp; 85 <input type="hidden" name="processType" value="update"> 86 </c:otherwise> 87 </c:choose> 88 &nbsp; 89 <input type="submit" value="一覧へ" name="backList" /> 90 </form> 91</body> 92</html> 93

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

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

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

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

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

guest

回答2

0

ベストアンサー

論理削除のONだけでなくON/OFFが必要なら、

lang

1update customer set deleteflag=? where CustomerID = ?

として、setPreparedStatementメソッドは

lang

1ps.setString(1, this.param.getDeleteFlag()); 2ps.setString(2, this.param.getId());

のように、deleteflagの分を追加します。

投稿2015/06/09 01:58

argius

総合スコア9388

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

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

yk-211

2015/06/09 02:07

ありがとうございます。 DBでDeleteFlagの初期値は0に設定してあり、チェックが入ったときに値が1になり論理削除する というものが作れたらと思っております。 上記回答の実装と、JSPの削除部分のvalueを1に変更して実行してみましたが、出来ませんでした。おそらく、JSPの<c:choose>より下の部分が怪しい気がしますが・・・
argius

2015/06/09 02:46

Tak1waさんのコメント欄を見て気づいたのですが、↓ここでしょうか。 input の"checkbox" name="deleteFlag" は、valueを変数にするとその値が送信されますので、変数にしてはダメな気がします。valueは"1"に固定して、チェックされていたらdeleteFlagは"1"が送られてきますし、チェックされていなければNULLになるかと思います。
yk-211

2015/06/09 02:54

回答ありがとうございます。 valueには1を入れています。INSERT時には必ず0が入るようになっており、チェックが されていない場合でも0が入っております。 チェックを入れて更新をしてもDB上のDeleteFlagが0→1に変わらないのですが、何か 他の原因があるのでしょうか。
guest

0

こんにちは。

論理削除をしたいのですよね?
DELETEだと物理削除になる気がしますが…。
CustomerID を条件に、deleteFlag = 1でUPDATE文を発行するのが正しいのでは?

Javaはさっぱりですが、JSPでのチェックボックスの値の取り扱いについて以下のブログは参考になりませんか?
http://www.orquesta.org/takegata/Article/ArticleView.jsp?article_id=305

投稿2015/06/08 14:12

Tak1wa

総合スコア4791

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

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

yk-211

2015/06/09 01:50

回答ありがとうございます! となるとまず、DELETE文でなくUPDATE文で作成しなければならないということですかね? 上記のブログを参考に作ってみましたが、うまく出来ませんでした・・・
Tak1wa

2015/06/09 02:07

どううまく出来ないでしょうか? チェックボックスのON/OFFをサーバーサイドで判定することまでは出来ていますか? それが出来ていればあとは、ONのとき、OFFのときで値に応じてUPDATE文を発行する流れになります。
yk-211

2015/06/09 02:16

回答いただきありがとうございます。 OFFの場合は0と初期値で設定されており、先ほどチェックをONにして実行したところ 0のままになっておりました。 ですので、今現在はまだ判定するところまでいっておりません。
Tak1wa

2015/06/09 03:25

argiusさんがコメントで解説頂いているとおり、まずはサーバサイドでON、OFFを判定してください。次にONの時はUPDATEでDeleteFlgを1に、OFFの時はUPDATEでDeleteFlgを0で更新しましょう。 そこまでできそうですか?
yk-211

2015/06/09 03:36

ありがとうございます。 出来るかどうか分かりませんが、自分でやってみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問