クラス TableUpdateParamTag

すべての実装されたインタフェース:
BodyTag, IterationTag, JspTag, Tag, TryCatchFinally, Serializable

TableUpdateTag にパラメーターを渡す為のタグクラスです。 汎用的なデータベース登録処理を行えるタグ tableUpdate タグを新規作成します。 これは、具体的なSLQを作成する tableUpdateParam タグと組み合わせて使用できます。 tableUpdate タグは、queryType に JDBCTableUpdate を指定します。基本的にこれだけ です。tableUpdateParam では、sqlType に、INSERT,COPY,UPDATE,MODIFY,DELETE の どれかを指定する事で、SQL文のタイプを指定します。COPY,MODIFY は command と 関連を持たす為に追加しているタイプで、UPDATE,INSERT と同じ処理を行います。 tableUpdateParam の table には、作成したい SQL のテーブルを指定します。 where 属性は、検索結果の DBTableModel の更新時に使用する条件を指定します。
関連項目:
変更履歴:
3.8.8.0 (2007/12/22) 新規作成, 4.1.2.0 (2008/03/12) 実装の大幅な修正, 7.2.9.1 (2020/10/23) TableUpdateParamTag のマージ(UPDATE,INSERT)対応
機能分類
DB登録
形式サンプル:
●形式:<og:tableUpdate command="{@command}" queryType="JDBCTableUpdate" > <og:tableUpdateParam sqlType = "{@sqlType}" // INSERT,COPY,UPDATE,MODIFY,DELETE,MERGE table = "{@TABLE_NAME}" // 処理対象のテーブル名 names = "{@names}" // 処理対象のカラム名 omitNames = "{@omitNames}" // 処理対象外のカラム名 where = "{@where}" // 処理対象を特定するキー whereNames = "{@whereNames}" // 処理対象を特定するキー条件(where句)をCSV形式 constKeys = "{@constKeys}" // 処理カラム名の中の固定情報カラム名 constVals = "{@constVals}" // 処理カラム名の中の固定情報設定値 asNames = "{@asNames}" // 別名を付けたカラム名(select A as B from TBL の B を指定) orgNames = "{@orgNames}" // tableの実際のカラム名(select A as B from TBL の A を指定) funcKeys = "{@funcKeys}" // 関数等を設定するカラム名 funcVals = "{@funcVals}" // 関数等の設定値 logicalDelete = "{@logicalDelete}" // sqlTypeがDELETEの場合にもUPDATE文を発行 /> </og:tableUpdate> ●body:なし ●Tag定義: <og:tableUpdateParam sqlType ○【TAG】BODY部に書かれている SQLタイプを指定します(INSERT,COPY,UPDATE,MODIFY,DELETE,MERGE)(必須) table ○【TAG】処理対象のテーブル名を指定します(必須) names 【TAG】処理対象のカラム名をCSV形式で複数指定します omitNames 【TAG】処理対象外のカラム名をCSV形式で複数指定します where 【TAG】処理対象を特定するキー条件(where句)を指定します whereNames 【TAG】処理対象を特定するキー条件(where句)をCSV形式で複数指定します insertOnly 【TAG】true に設定すると、sqlType="MERGE" 時のみ有効で、where 条件で存在すれば何もしない(初期値:false) 7.4.1.0 (2021/04/23) constKeys 【TAG】設定値を固定値と置き換える対象となるカラム名をCSV形式で複数指定します constVals 【TAG】設定値を固定値と置き換える対象となる設定値をCSV形式で複数指定します funcKeys 【TAG】関数等を設定するカラム名をCSV形式で複数指定します funcVals 【TAG】関数等の設定値をCSV形式で複数指定します asNames 【TAG】別名を付けたカラム名(select A as B from TBL の B を指定)をCSV形式で複数指定します orgNames 【TAG】tableの実際のカラム名(select A as B from TBL の A を指定)をCSV形式で複数指定します quotCheck 【TAG】リクエスト情報の シングルクォート(') 存在チェックを実施するかどうか[true/false]を設定します (初期値:USE_SQL_INJECTION_CHECK[=true]) constObjKey 【TAG】固定情報カラムの処理オブジェクトを特定するキーを設定します(初期値:SYSTEM_ID) logicalDelete 【TAG】sqlType="DELETE"の場合に論理削除(UPDATE)を行うかどうかを指定します(初期値:false) caseKey 【TAG】このタグ自体を利用するかどうかの条件キーを指定します(初期値:null) caseVal 【TAG】このタグ自体を利用するかどうかの条件値を指定します(初期値:null) caseNN 【TAG】指定の値が、null/ゼロ文字列 でない場合(Not Null=NN)は、このタグは使用されます(初期値:判定しない) caseNull 【TAG】指定の値が、null/ゼロ文字列 の場合は、このタグは使用されます(初期値:判定しない) caseIf 【TAG】指定の値が、true/TRUE文字列の場合は、このタグは使用されます(初期値:判定しない) debug 【TAG】デバッグ情報を出力するかどうか[true/false]を指定します(初期値:false) /> ●使用例 ・【entry.jsp】 <og:tableUpdate command="{@command}" queryType="JDBCTableUpdate" > <og:tableUpdateParam sqlType = "{@sqlType}" table = "{@MEM.TABLE_NAME}" where = "ROWID = [ROWID]" /> </og:tableUpdate>
導入されたバージョン:
JDK5.0,
  • フィールド詳細

  • コンストラクタの詳細

    • TableUpdateParamTag

      デフォルトコンストラクター
      変更履歴:
      6.4.2.0 (2016/01/29) PMD refactoring. Each class should declare at least one constructor.
  • メソッドの詳細

    • doStartTag

      public int doStartTag()
      Taglibの開始タグが見つかったときに処理する doStartTag() を オーバーライドします。
      定義:
      doStartTag インタフェース内 Tag
      オーバーライド:
      doStartTag クラス内 CommonTagSupport
      戻り値:
      後続処理の指示( SKIP_BODY )
      変更履歴:
      5.5.1.9 (2012/04/19) エラーチェックを先に行います。, 6.3.4.0 (2015/08/01) caseKey,caseVal,caseNN,caseNull,caseIf 属性対応, 7.0.1.0 (2018/10/15) XHTML → HTML5 対応(空要素の、"/>" 止めを、">" に変更します)。, 8.5.4.2 (2024/01/12) PMD 7.0.0 CollapsibleIfStatements 対応
    • doEndTag

      public int doEndTag()
      Taglibの終了タグが見つかったときに処理する doEndTag() を オーバーライドします。
      定義:
      doEndTag インタフェース内 Tag
      オーバーライド:
      doEndTag クラス内 CommonTagSupport
      戻り値:
      後続処理の指示
      変更履歴:
      4.3.7.0 (2009/06/01) 論理削除対応, 6.3.4.0 (2015/08/01) caseKey,caseVal,caseNN,caseNull,caseIf 属性対応, 7.2.9.1 (2020/10/23) TableUpdateParamTag のマージ(UPDATE,INSERT)対応, 7.4.1.0 (2021/04/23) sqlType="MERGE" 時のみ有効で、where 条件で存在すれば何もしない, 8.3.0.3 (2022/08/26) sqlType="MERGE" の場合、UPDATE文 に追加関連固定カラムキーが追加される不具合対応
    • release2

      protected void release2()
      タグリブオブジェクトをリリースします。 キャッシュされて再利用されるので、フィールドの初期設定を行います。
      オーバーライド:
      release2 クラス内 CommonTagSupport
      変更履歴:
      4.3.7.0 (2009/06/01) logicalDelete属性追加, 5.5.1.9 (2012/04/19) asNames、orgNames、funcKeys、funcVals属性追加, 5.5.8.5 (2012/11/27) 処理対象を特定するCSV形式のカラム名, 7.4.1.0 (2021/04/23) sqlType="MERGE" 時のみ有効で、where 条件で存在すれば何もしない
    • setSqlType

      public void setSqlType(String type)
      【TAG】BODY部に書かれている SQLタイプを指定します。
      パラメータ:
      type - SQLタイプ [INSERT/COPY/UPDATE/MODIFY/DELETE/MERGE]
      説明:
      SQLタイプは、INSERT,COPY,UPDATE,MODIFY,DELETE,MERGE の中から指定する 必要があります。これらは、内部に書かれるSQLの形式を指定するのに使用します。 内部処理は、DBTableModelの改廃コード(A,C,D)に対して使用される SQL を選択する場合の情報に使用されます。 なお、COPY と MODIFY は、command で指定できる簡易機能として用意しています。 上位の TableUpdateTag の sqlType 属性 と同じsqlType 属性の場合のみ、SQL文を 合成・出力します。(上位のsqlTypeがnullの場合は、無条件実行します。) 指定のタイプが、異なる場合は、なにも処理を行いません。
    • setTable

      public void setTable(String tbl)
      【TAG】処理対象のテーブル名を指定します。
      パラメータ:
      tbl - テーブル名
      関連項目:
      説明:
      テーブル名を指定することで、sqlTypeに応じた QUERYを生成することが出来ます。 生成する場合のカラムを特定する場合は、names 属性で指定できます。 また、WHERE条件は、where属性で指定します。
    • setNames

      public void setNames(String nms)
      【TAG】処理対象のカラム名をCSV形式で複数指定します。
      パラメータ:
      nms - カラム名 (CSV形式)
      関連項目:
      変更履歴:
      3.8.8.5 (2007/03/09) 通常のパラメータ取得後に、CSV分解に戻します。
      説明:
      生成するQUERYのカラム名をCSV形式(CSV)で複数指定します。 指定がない場合は、DBTableModel の全カラム(※)を使用して、QUERYを構築します。 一般に、テーブル結合してDBTableModelを構築した場合は、登録すべきカラムを 指定する必要があります。 (※)正確には、DBTableModel の全カラムのうち、ROWID,ROWNUM,WRITABLE カラムは 無視します。 分解方法は、通常のパラメータ取得後に、CSV分解します。
    • setOmitNames

      public void setOmitNames(String nms)
      【TAG】処理対象外のカラム名をCSV形式で複数指定します。
      パラメータ:
      nms - カラム名 (CSV形式)
      関連項目:
      説明:
      生成するQUERYのカラム名に指定しないカラム名をCSV形式(CSV)で複数指定します。 指定がない場合は、DBTableModel の全カラム(※)を使用して、QUERYを構築します。 テーブル結合などで、処理したくないカラム数の方が少ない場合に、names ですべてを 指定するより少ない記述ですみます。 (※)正確には、DBTableModel の全カラムのうち、ROWID,ROWNUM,WRITABLE カラムは 無視します。
    • setWhere

      public void setWhere(String wr)
      【TAG】処理対象を特定するキー条件(where句)を指定します。
      パラメータ:
      wr - 検索条件 (where句)
      説明:
      生成するQUERYのwhere 句を指定します。通常の WHERE 句の書き方と同じで、 DBTableModelの値を割り当てたい箇所に[カラム名] を記述します。 文字列の場合、設定値をセットするときに、シングルコーテーションを 使用しますが、[カラム名]で指定する場合は、その前後に、(')シングル コーテーションは、不要です。 {@XXXX}変数を使用する場合は、パース時に固定文字に置き換えられる為、 文字列指定時の(')シングルコーテーションが必要になります。 ※ 5.5.8.5 (2012/11/27) whereNames 属性と併用した場合は、where が、and を付けて、文字列結合されます。 例:FGJ='1' and CLM=[CLM] and SYSTEM_ID in ([SYSID],'**') and KBSAKU='{@KBSAKU}'
    • setWhereNames

      public void setWhereNames(String wrnm)
      【TAG】処理対象を特定するキー条件(where句)をCSV形式で複数指定します。
      パラメータ:
      wrnm - 検索条件カラム (where句)作成のためのカラム名(CSV形式)
      変更履歴:
      5.5.8.5 (2012/11/27) 新規追加
      説明:
      生成するQUERYのwhere 句を指定する方法として、複数のカラム名をCSV指定し、内部で KEY=[KEY] 文字列を作成します。 ここでは、カラム名は、データベースのカラム名と同じで、かつ、DBTableModel にも 同じカラムのデータが存在していること、という条件付きとします。 また、where 条件との併用を行いますが、こちらの条件が先に使用され、where 条件は、 and を付けて、文字列結合されます。 例: CLM,SYSTEM_ID,KBSAKU ⇒ CLM=[CLM] and SYSTEM_ID=[SYSTEM_ID] and KBSAKU=[KBSAKU]
    • setInsertOnly

      public void setInsertOnly(String flag)
      【TAG】true に設定すると、sqlType="MERGE" 時のみ有効で、where 条件で存在すれば何もしない(初期値:false)。
      パラメータ:
      flag - "true" に設定すると、sqlType="MERGE" 時に、where条件で検索
      変更履歴:
      7.4.1.0 (2021/04/23) sqlType="MERGE" 時のみ有効で、where 条件で存在すれば何もしない
      説明:
      true に設定すると、sqlType="MERGE" 時に、where条件で、検索して、存在しない場合は、追加します。 存在する場合は、何もしません。 何もしない(更新しない)ところが、通常のMERGEと異なる箇所です。 動作としては、UPDATEの代わりに、SELECT で判定します。 初期値は、false で、あれば更新、なければ追加処理を行います。
    • setConstKeys

      public void setConstKeys(String keys)
      【TAG】設定値を固定値と置き換える対象となるカラム名をCSV形式で複数指定します。
      パラメータ:
      keys - 固定値カラム (CSV形式)
      関連項目:
      説明:
      names 属性のカラムや table 属性より、QUERYを作成して、DBTableModelの値を 割り当てる場合、DBTableModelの値ではなく、外部から指定した固定値を 割り当てたい場合に、そのカラム名をCSV形式(CSV)で複数指定します。 分解方法は、CSV変数を先に分解してから、getRequestParameter で値を取得します。 こうしないとデータ自身にカンマを持っている場合に分解をミスる為です。
    • setConstVals

      public void setConstVals(String vals)
      【TAG】設定値を固定値と置き換える対象となる設定値をCSV形式で複数指定します。
      パラメータ:
      vals - 設定値(CSV形式)
      関連項目:
      説明:
      names 属性のカラムや table 属性より、QUERYを作成して、DBTableModelの 値を割り当てる場合、DBTableModelの値ではなく、外部から指定した固定値を 割り当てたい場合に、そのカラム名に対応する設定値をCSV形式(CSV)で 複数指定します。ここで指定する設定値は、constKeys 属性と対応させます。 分解方法は、CSV変数を先に分解してから、getRequestParameter で値を取得します。 こうしないとデータ自身にカンマを持っている場合に分解をミスる為です。
    • setFuncKeys

      public void setFuncKeys(String keys)
      【TAG】関数等を設定するカラム名をCSV形式で複数指定します。
      パラメータ:
      keys - 関数カラム (CSV形式)
      関連項目:
      変更履歴:
      5.5.1.9 (2012/04/19) 新規追加
      説明:
      constVals 属性で設定する値は、必ずシングルクオートが付与されます。 その場合、関数などを設定したい場合でも、文字列として設定しようとします。 ここで指定するカラム名(funcKeys)自身は、constKeys と同じ書式です。 分解方法は、CSV変数を先に分解してから、getRequestParameter で値を取得します。 こうしないとデータ自身にカンマを持っている場合に分解をミスる為です。
    • setFuncVals

      public void setFuncVals(String vals)
      【TAG】関数等の設定値をCSV形式で複数指定します。
      パラメータ:
      vals - 関数設定値 (CSV形式)
      関連項目:
      変更履歴:
      5.5.1.9 (2012/04/19) 新規追加
      説明:
      funcKeys 属性に対応する 関数などの設定値を割り当てます。 constVals 属性との違いは、funcVals の設定値は、そのままの形で、SQL文の 構築に使われます。 分解方法は、CSV変数を先に分解してから、getRequestParameter で値を取得します。 こうしないとデータ自身にカンマを持っている場合に分解をミスる為です。
    • setAsNames

      public void setAsNames(String keys)
      【TAG】別名を付けたカラム名(select A as B from TBL の B を指定)をCSV形式で複数指定します。
      パラメータ:
      keys - 別名カラム (CSV形式)
      関連項目:
      変更履歴:
      5.5.1.9 (2012/04/19) 新規追加
      説明:
      SELECT 文を記述したとき、別名を付けていたり、SELECTしたテーブルと別のテーブルに DBTableModelの値を書き込む場合、DBTableModel の持っているカラム名と、実際に 書き込むカラム名が異なります。そのようなケースに、元の別名カラムを指定します。 orgNames属性の並び順と、asNames属性の並び順を合わせておく必要があります。 このカラム名は、DBTableModel には持っているが、テーブル側には持っていない値 なので、内部的に omitNames 属性に値を設定します。利用者は、omitNames に 書き込む必要はありません。 分解方法は、CSV変数を先に分解してから、getRequestParameter で値を取得します。 こうしないとデータ自身にカンマを持っている場合に分解をミスる為です。
    • setOrgNames

      public void setOrgNames(String keys)
      【TAG】tableの実際のカラム名(select A as B from TBL の A を指定)をCSV形式で複数指定します。
      パラメータ:
      keys - 実カラム (CSV形式)
      関連項目:
      変更履歴:
      5.5.1.9 (2012/04/19) 新規追加
      説明:
      SELECT 文を記述したとき、別名を付けていたり、SELECTしたテーブルと別のテーブルに DBTableModelの値を書き込む場合、DBTableModel の持っているカラム名と、実際に 書き込むカラム名が異なります。そのようなケースに、テーブルの実カラムを指定します。 orgNames属性の並び順と、asNames属性の並び順を合わせておく必要があります。 このカラム名は、DBTableModel には持っていませんが、テーブル側には持っている値 なので、このカラム名で、SQL文を構築します。 UPDATE TBL SET A=[B] WHERE … となります。 分解方法は、CSV変数を先に分解してから、getRequestParameter で値を取得します。 こうしないとデータ自身にカンマを持っている場合に分解をミスる為です。
    • setQuotCheck

      public void setQuotCheck(String flag)
      【TAG】リクエスト情報の シングルクォート(') 存在チェックを実施するかどうか[true/false]を設定します (初期値:USE_SQL_INJECTION_CHECK[=])。
      パラメータ:
      flag - クォートチェック [true:する/それ以外:しない]
      関連項目:
      説明:
      SQLインジェクション対策の一つとして、暫定的ではありますが、SQLのパラメータに 渡す文字列にシングルクォート(') を許さない設定にすれば、ある程度は防止できます。 数字タイプの引数には、 or 5=5 などのシングルクォートを使用しないコードを埋めても、 数字チェックで検出可能です。文字タイプの場合は、必ず (')をはずして、 ' or 'A' like 'A のような形式になる為、(')チェックだけでも有効です。 (') が含まれていたエラーにする(true)/かノーチェックか(false)を指定します。 (初期値:システム定数のUSE_SQL_INJECTION_CHECK[=])。
    • setConstObjKey

      public void setConstObjKey(String key)
      【TAG】固定情報カラムの処理オブジェクトを特定するキーを設定します(初期値:SYSTEM_ID)。
      パラメータ:
      key - 固定カラムキー
      変更履歴:
      6.9.8.0 (2018/05/28) 固定情報カラムを使用しない場合は、constObjKey="" をセット。
      説明:
      固定情報カラム をシステム単位にJavaクラスで管理できます。 そのクラスオブジェクトは、org.opengion.hayabusa.db.DBConstValue インターフェースを 継承した、plugin クラスになります。 そのクラスを特定するキーワードを指定します。 初期値は、SYSTEM_ID でシステム単位にクラスを作成します。 もし、他のシステムと共通の場合は、継承だけさせることも可能です。 対応したDBConstValueクラスがプラグインとして存在しない場合は、 システムリソースのDEFAULT_CONST_CLASSで指定されたクラスが利用されます。 固定情報カラムを使用しない場合は、constObjKey="" をセットしてください。 初期値は、SYSTEM_ID です。
    • setLogicalDelete

      public void setLogicalDelete(String flag)
      【TAG】sqlType="DELETE"の場合に論理削除(UPDATE)を行うかどうかを指定します(初期値:false)。
      パラメータ:
      flag - 論理削除可否 [true:UPDATE文/false:DELETE文]
      説明:
      sqlType="DELETE"の場合に論理削除(UPDATE)を行うかどうかを指定します。 trueが指定された場合は、DELETE文ではなく、UPDATE文が発行されます。 falseが指定された場合は、DELETE文が発行されます。 さらに論理削除を行う場合、org.opengion.hayabusa.db.DBConstValue インターフェースに 定義されている、getLogicalDeleteKeys()及びgetLogicalDeleteValsを実装することで、 論理削除する際のフラグの更新方法を統一的に管理することが可能になります。 初期値は、false(物理削除する)です
    • toString

      public String toString()
      このオブジェクトの文字列表現を返します。 基本的にデバッグ目的に使用します。
      オーバーライド:
      toString クラス内 CommonTagSupport
      戻り値:
      このクラスの文字列表現
      このメソッドは、nullを返しません