クラス TableUpdateTag
java.lang.Object
jakarta.servlet.jsp.tagext.TagSupport
jakarta.servlet.jsp.tagext.BodyTagSupport
org.opengion.hayabusa.taglib.CommonTagSupport
org.opengion.hayabusa.taglib.QueryTag
org.opengion.hayabusa.taglib.TableUpdateTag
- すべての実装されたインタフェース:
BodyTag
,IterationTag
,JspTag
,Tag
,TryCatchFinally
,Serializable
SQL文を直接指定して、データベースに追加/更新/削除を行います(queryType="JDBCTableUpdate")。
存在チェックを行う場合は、tableExist タグと併用してください。
複雑な処理が必要な場合は、従来より使用しています、PLSQLをCALLする、
plsqlUpdateタグを使用してください。
また、tableUpdateParam タグを使用する事で、テーブル名とsqlTypeの指定で動的に
SQL文を自動生成できます。これにより、追加、更新、削除やテーブルに関して、
単一のJSP画面ですべて対応できるようになります。
7.2.9.3 (2020/11/06)
queryType="JDBCTableMerge" と、"JDBCTableUpdate" を相互運用します。
tableUpdateParam タグのsqlType="MERGE" を指定しておくと、
UPDATE文とINSERT文を両方とも作成して、有れば更新なければ追加処理を行います。
その場合、queryTypeを、JDBCTableMerge に変更します。
sqlType が従来の"INSERT"や"UPDATE" の場合は、queryTypeを、JDBCTableUpdate
に変更します。
この変換は、"JDBCTableMerge" と、"JDBCTableUpdate" を相互運用します。
※ このタグは、Transaction タグの対象です。
- 関連項目:
- 変更履歴:
- 3.8.8.0 (2007/12/22) 新規作成
- 機能分類
- DB登録
- 形式サンプル:
- ●形式:<og:tableUpdate command="…" names="…" queryType="JDBCTableUpdate" > {@SQL} </og:tableUpdate> ●body:あり(EVAL_BODY_BUFFERED:BODYを評価し、{@XXXX} を解析します) ●Tag定義: <og:tableUpdate queryType 【TAG】Query を発行する為のクラスID(JDBCTableUpdate,JDBCTableMerge)を指定します() sqlType 【TAG】BODY部に書かれている Param の SQLタイプを指定します(INSERT,COPY,UPDATE,MODIFY,DELETE,MERGE,無指定) command 【TAG】コマンド (NEW,RENEW)をセットします(PlsqlUpdateTag,UpdateTag の場合は、ENTRY) scope 【TAG】キャッシュする場合のスコープ[request/session/application]を指定します (初期値:session) displayMsg 【TAG】検索結果を画面上に表示するメッセージリソースIDを指定します (初期値:VIEW_DISPLAY_MSG[=]) resourceType 【特殊】クリアするリソースの種類[GEA03/GEA04/GEA08]を指定します conditionKey 【TAG】条件判定するカラムIDを指定します(初期値:null) conditionList 【TAG】条件判定する値のリストを、"|"で区切って登録します(初期値:無条件) 7.0.1.8 (2019/01/28) 正規表現に変更 tableId 【TAG】(通常は使いません)結果のDBTableModelを、sessionに登録するときのキーを指定します dbid 【TAG】(通常は使いません)Queryオブジェクトを作成する時のDB接続IDを指定します selectedAll 【TAG】データを全件選択済みとして処理するかどうか[true/false]を指定します(初期値:false) selectedOne 【TAG】データを1件選択済みとして処理するかどうか[true/false]を指定します(初期値:false) changeOnly 【TAG】変更があったデータのみを処理するかどうか[true/false]を指定します(初期値:false) 7.4.2.0 (2021/04/30) commitTableModel 【特殊】SQL実行後に結果をDBTableModelに反映させるかどうか[true/false]を指定します(初期値:true) followCdkh 【TAG】DBTableModelの改廃Cに従って処理を行うかを指定します quotCheck 【TAG】リクエスト情報の シングルクォート(') 存在チェックを実施するかどうか[true/false]を設定します(初期値:false) useTimeView 【TAG】処理時間を表示する TimeView を表示するかどうかを指定します (初期値:VIEW_USE_TIMEBAR[=])。 useSLabel 【TAG】7.0.7.0 (2019/12/13) エラーメッセージにSLABELを利用するかどうか[true/false]を指定します(初期値: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) > ... Body ... </og:tableUpdate> ●使用例 ・QUERYを他のJSPから渡す場合 【copy.jsp】 <og:hidden name="SQL" > INSERT INTO GE41 (CLM,NAME_JA,LABEL_NAME,KBSAKU,SYSTEM_ID,LANG, FGJ,DYSET,DYUPD,USRSET,USRUPD,PGUPD) VALUES ([CLM],[NAME_JA],[LABEL_NAME],[KBSAKU],[SYSTEM_ID],[LANG], '1','{@USER.YMDH}','{@USER.YMDH}','{@USER.ID}','{@USER.ID}','{@GUI.KEY}') </og:value> 【entry.jsp】 <og:tableUpdate command = "{@command}" queryType = "JDBCTableUpdate" {@SQL} </og:tableUpdate> ・tableUpdateParamを使用する場合 【entry.jsp】 <og:tableUpdate command = "{@command}" queryType = "JDBCTableUpdate" sqlType = "{@sqlType}" // tableUpdateParam の sqlType と一致 > <og:tableUpdateParam sqlType = "{@sqlType}" // INSERT,COPY,UPDATE,MODIFY,DELETE,MERGE table = "{@TABLE_NAME}" // 処理対象のテーブル名 names = "{@names}" // 処理対象のカラム名 omitNames = "{@omitNames}" // 処理対象外のカラム名 where = "{@where}" // 処理対象を特定するキー constKeys = "{@constKeys}" // 処理カラム名の中の固定情報カラム名 constVals = "{@constVals}" // 処理カラム名の中の固定情報設定値 /> </og:tableUpdate> ・処理の可否を指定する場合 【entry.jsp】 <og:tableUpdate command = "{@command}" queryType = "JDBCTableUpdate" conditionKey ="…" : 条件判定するカラムIDを指定(初期値は columnId ) conditionList ="…" : 条件判定する値のリストを、"|"で区切って登録(初期値は、無条件) {@SQL} </og:tableUpdate> ・JDBCTableUpdate のまま、sqlType="MERGE" を指定する場合。 一つのtableUpdateParamで、両方(UPDATE,INSERT)の処理を実行します。 【entry.jsp】 <og:tableUpdate command = "{@command}" queryType = "JDBCTableUpdate" <og:tableUpdateParam sqlType = "MERGE" // INSERT or UPDATE table = "{@TABLE_NAME}" // 処理対象のテーブル名 names = "{@names}" // 処理対象のカラム名 omitNames = "{@omitNames}" // 処理対象外のカラム名 where = "{@where}" // 処理対象を特定するキー(INSERT時には使われず、UPDAET時に使われる。) constKeys = "{@constKeys}" // 処理カラム名の中の固定情報カラム名 constVals = "{@constVals}" // 処理カラム名の中の固定情報設定値 /> </og:tableUpdate>
- 導入されたバージョン:
- JDK5.0,
-
フィールドの概要
フィールドクラスから継承されたフィールド org.opengion.hayabusa.taglib.QueryTag
CMD_NEW, CMD_RENEW, command, dispError, displayMsg, dyStart, ERR_MSG_ID, errCode, errMessage, executeCount, maxRowCount, names, outMessage, skipRowCount, sql, stopError, table, tableId, useSLabel, useTimeView, xssCheck
クラスから継承されたフィールド org.opengion.hayabusa.taglib.CommonTagSupport
BR, BUFFER_MIDDLE, CR
クラスから継承されたフィールド jakarta.servlet.jsp.tagext.BodyTagSupport
bodyContent
クラスから継承されたフィールド jakarta.servlet.jsp.tagext.TagSupport
id, pageContext
インタフェースから継承されたフィールド jakarta.servlet.jsp.tagext.BodyTag
EVAL_BODY_BUFFERED, EVAL_BODY_TAG
インタフェースから継承されたフィールド jakarta.servlet.jsp.tagext.IterationTag
EVAL_BODY_AGAIN
インタフェースから継承されたフィールド jakarta.servlet.jsp.tagext.Tag
EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
-
コンストラクタの概要
コンストラクタ -
メソッドの概要
修飾子とタイプメソッド説明int
doEndTag()
Taglibの終了タグが見つかったときに処理する doEndTag() を オーバーライドします。int
Taglibの開始タグが見つかったときに処理する doStartTag() を オーバーライドします。protected void
Query を実行します。protected String[]
getNames()
引数の名称配列。protected int[]
表示データの HybsSystem.ROW_SEL_KEY を元に、選ばれた 行番号の 配列を返します。protected String
SQLタイプを返します。protected void
release2()
タグリブオブジェクトをリリースします。void
setChangeOnly
(String change) 【TAG】変更があったデータのみを処理するかどうか[true/false]を指定します(初期値:false)。void
setCommitTableModel
(String commitTblMdl) 【特殊】SQL実行後に結果をDBTableModelに反映させるかどうか[true/false]を指定します(初期値:true)。void
setConditionKey
(String key) 【TAG】条件判定するカラムIDを指定します(初期値:null)。void
setConditionList
(String list) 【TAG】条件判定する値のリストを、"|"で区切って登録します(初期値:無条件)。void
setFollowCdkh
(String flag) 【TAG】DBTableModelの改廃Cに従って処理を行うかを指定します。void
setQueryType
(String id) 【TAG】Query を発行する為のクラスID(JDBCTableUpdate,JDBCTableMerge)を指定します()。void
setQuotCheck
(String flag) 【TAG】リクエスト情報の シングルクォート(') 存在チェックを実施するかどうか[true/false]を設定します(初期値:false)。void
setResourceType
(String type) 【特殊】クリアするリソースの種類[GEA03/GEA04/GEA08]を指定します。void
setSelectedAll
(String all) 【TAG】データを全件選択済みとして処理するかどうか[true/false]を指定します(初期値:false)。void
setSelectedOne
(String one) 【TAG】データを1件選択済みとして処理するかどうか[true/false]を指定します(初期値:false)。void
setSqlType
(String type) 【TAG】BODY部に書かれている Param の SQLタイプを指定します。toString()
このオブジェクトの文字列表現を返します。クラスから継承されたメソッド org.opengion.hayabusa.taglib.QueryTag
addPlaceValue, doAfterBody, getRequest, setCheckNames, setCommand, setDbid, setDispError, setDisplayMsg, setMainTrans, setMaxRowCount, setModifyType, setNames, setNotfoundMsg, setOutMessage, setOverflowMsg, setQuery, setSkipRowCount, setStopError, setStopZero, setTableId, setTrace, setUseBeforeHtmlTag, setUseSLabel, setUseTimeView, setXssCheck
クラスから継承されたメソッド org.opengion.hayabusa.taglib.CommonTagSupport
add, add, addEventColumn, addEventColumn, check, commitTableObject, debugPrint, debugPrint, doCatch, doFinally, get, getApplicationInfo, getAttributes, getBodyRawString, getBodyString, getContextAttribute, getContextPath, getCookie, getCSVParameter, getCSVParameter, getDateFormat, getDBColumn, getDBFunctionName, getDocumentLink, getGUIInfo, getGUIInfoAttri, getHostName, getLabel, getLabelInterface, getLanguage, getLongLabel, getMsg, getMsglbl, getObject, getParameterNames, getRequest, getRequestAttribute, getRequestCacheData, getRequestMethod, getRequestParameter, getRequestParameterValues, getRequestValue, getRequestValue, getRequestValues, getReservedParameter, getReservedValue, getResource, getSanitizedBodyString, getScope, getSessionAttribute, getTagName, getTransaction, getUser, getUserEditInfo, getUserInfo, isAjaxSubmitRequest, isDebug, isNoTransitionRequest, isNull, jspPrint, makeUrl, removeContextAttribute, removeObject, removeRequestAttribute, removeSessionAttribute, set, setAjaxSubmitRequest, setCaseIf, setCaseKey, setCaseNN, setCaseNull, setCaseVal, setContextAttribute, setCookie, setDebug, setLanguage, setLbl, setNoTransitionRequest, setObject, setObject, setParameterNames, setParameterRows, setRequestAttribute, setRequestCacheData, setScope, setSessionAttribute, setUserInfo, startQueryTransaction, sys, sysBool, sysInt, useMainTrans, useQuotCheck, useStrict, useTag, useXssCheck
クラスから継承されたメソッド jakarta.servlet.jsp.tagext.BodyTagSupport
doInitBody, getBodyContent, getPreviousOut, release, setBodyContent
クラスから継承されたメソッド jakarta.servlet.jsp.tagext.TagSupport
findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
クラスから継承されたメソッド java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
インタフェースから継承されたメソッド jakarta.servlet.jsp.tagext.Tag
getParent, setPageContext, setParent
-
フィールド詳細
-
コンストラクタの詳細
-
TableUpdateTag
public TableUpdateTag()デフォルトコンストラクター- 変更履歴:
- 6.4.2.0 (2016/01/29) PMD refactoring. Each class should declare at least one constructor.
-
-
メソッドの詳細
-
doStartTag
Taglibの開始タグが見つかったときに処理する doStartTag() を オーバーライドします。- 定義:
doStartTag
インタフェース内Tag
- オーバーライド:
doStartTag
クラス内QueryTag
- 戻り値:
- 後続処理の指示( EVAL_BODY_BUFFERED )
- 変更履歴:
- 4.0.0.0 (2007/11/14) 0件の場合でもstartQueryTransactionを通すように変更, 5.1.7.0 (2010/06/01) quotCheckを指定できるようにする。※但し、初期値はfalse固定。, 6.3.4.0 (2015/08/01) caseKey,caseVal,caseNN,caseNull,caseIf 属性対応
-
doEndTag
Taglibの終了タグが見つかったときに処理する doEndTag() を オーバーライドします。- 定義:
doEndTag
インタフェース内Tag
- オーバーライド:
doEndTag
クラス内QueryTag
- 戻り値:
- 後続処理の指示
- 変更履歴:
- 4.0.0.0 (2007/10/18) メッセージリソース統合( getResource().getMessage ⇒ getResource().getLabel ), 6.3.4.0 (2015/08/01) caseKey,caseVal,caseNN,caseNull,caseIf 属性対応, 6.4.1.2 (2016/01/22) QueryTag.errMsgId → QueryTag.ERR_MSG_ID refactoring, 6.9.9.0 (2018/08/20) 「ERR0041:検索処理中に割り込みの検索要求がありました」エラーを、標準のErrorMessageに追加するようにします。, 7.0.7.0 (2019/12/13) useSLabel 属性を追加。
-
release2
タグリブオブジェクトをリリースします。 キャッシュされて再利用されるので、フィールドの初期設定を行います。 -
execute
Query を実行します。 -
getParameterRows
表示データの HybsSystem.ROW_SEL_KEY を元に、選ばれた 行番号の 配列を返します。 ここでは、conditionKey に値が設定されている場合は、そのカラムの値が conditionList にマッチする場合のみ対象選択行として返します。 値がセットされていない場合は、通常のCommonTagSupport#getParameterRows() が呼ばれます。 なにも選ばれていない場合は、サイズ0の配列を返します。- オーバーライド:
getParameterRows
クラス内CommonTagSupport
- 戻り値:
- (選ばれていない場合は、サイズ0の配列を返す)
- 変更履歴:
- 4.3.2.0 (2008/09/09) followCdkh属性対応, 7.0.1.8 (2019/01/28) conditionListの判定を、正規表現に変更, 7.4.2.0 (2021/04/30) selectedOne、changeOnlyを追加します
- このメソッドは、nullを返しません
-
setQueryType
【TAG】Query を発行する為のクラスID(JDBCTableUpdate,JDBCTableMerge)を指定します()。- オーバーライド:
setQueryType
クラス内QueryTag
- パラメータ:
id
- Queryタイプ- 関連項目:
- 説明:
- 引数指定のUPDATE,INSERT,DELETE文を実行する場合の、queryType 属性を使用します。 このタグでは、execute( int[] ,DBTableModel )を実行します。 代表的なクラスとして、"JDBCTableUpdate" が標準で用意されています。 タグにより使用できる/出来ないがありますが、これは、org.opengion.hayabusa.db 以下の Query_**** クラスの **** を与えます。 これらは、Query インターフェースを継承したサブクラスです。
-
setResourceType
【特殊】クリアするリソースの種類[GEA03/GEA04/GEA08]を指定します。- パラメータ:
type
- クリアリソースタイプ [GEA03/GEA04/GEA08]- 説明:
- 注意:この属性は、リソース関連DBのメンテナンス時にのみ、内部リソースキャッシュを クリアする目的で使用します。一般の属性としては、使用することはないため、 ご注意ください。 リソース関連のテーブルを更新した場合、リソースキャッシュをクリアして 置かないと、データベースの値が反映されません。 昔は、リソースの更新ごとに、全件クリアしていましたが、部分クリアが できるようになったため、部分クリアを行います。 こでは、(GEA03,GEA04,GEA08) のどれかを指定してください。
-
setConditionKey
【TAG】条件判定するカラムIDを指定します(初期値:null)。- パラメータ:
key
- 条件判定カラム- 関連項目:
- 説明:
- 指定のカラムIDの値と、conditionList の値を比較して、 存在する場合は、Query 処理を実行します。 例えば、conditionKey="CDKH" として、conditionList="A" とすれば、 改廃コードが"A"のデータで、かつ選択されたデータのみを処理します。 設定しない場合は、通常の処理と同様に、選択行のみ処理されます。
-
setConditionList
【TAG】条件判定する値のリストを、"|"で区切って登録します(初期値:無条件)。- パラメータ:
list
- 条件判定値 ("|"区切のリスト)- 関連項目:
- 変更履歴:
- 7.0.1.8 (2019/01/28) conditionListの判定を、正規表現に変更
- 説明:
- conditionKey とペアで指定します。ここには、カラムの設定値のリストを 指定することで、複数条件(OR結合)での比較を行い、リストにカラム値が 存在する場合のみ、Query 処理を実行します。 値が設定されている場合は、その値とマッチする必要があります。なにもセット されない場合、または、null の場合は、null データとマッチする場合のみ処理 されますので、ご注意ください。
-
setSelectedAll
【TAG】データを全件選択済みとして処理するかどうか[true/false]を指定します(初期値:false)。- パラメータ:
all
- データを全件選択済み [true:全件選択済み/false:通常]- 説明:
- 全てのデータを選択済みデータとして扱って処理します。 全件処理する場合に、(true/false)を指定します。 初期値は false です。 changeOnly よりも selectedAll="true" が優先されます。 7.4.2.0 (2021/04/30)
-
setSelectedOne
【TAG】データを1件選択済みとして処理するかどうか[true/false]を指定します(初期値:false)。- パラメータ:
one
- 先頭行の1件だけを選択済みとして処理するかどうか [true:処理する/false:通常]- 変更履歴:
- 7.4.2.0 (2021/04/30) データを1件選択済みとして処理するかどうか[true/false]を指定します(初期値:false)
- 説明:
- 先頭行の1件だけを選択済みとして処理します。 まとめ処理のデータを処理する場合などに使われます。 初期値は false です。
-
setChangeOnly
【TAG】変更があったデータのみを処理するかどうか[true/false]を指定します(初期値:false)。- パラメータ:
change
- 変更があったデータのみを処理するかどうか [true:変更分のみ/false:通常]- 変更履歴:
- 7.4.2.0 (2021/04/30) 変更があったデータのみを処理するかどうか[true/false]を指定します(初期値:false)
- 説明:
- 変更があったデータのみを処理します。 selectedAll="true" が指定された場合は、全件処理が優先されます。 通常は、チェックされた行のみか、selectedAll で全件処理しますが、空更新のデータは 登録したくないケースに、元データと異なる行のみ処理します。 初期値は false です。
-
setCommitTableModel
【特殊】SQL実行後に結果をDBTableModelに反映させるかどうか[true/false]を指定します(初期値:true)。- パラメータ:
commitTblMdl
- 反映有無 [true:反映する/false:反映しない]- 変更履歴:
- 4.0.2.0 (2007/12/25) 新規作成
- 説明:
- 注意:この属性は、リソース関連DBのメンテナンス時に、複数DBへの登録を行うための、 暫定対応として定義しています。 falseにした場合は、実データとDBTableModelの整合性が取れなくなるため、使用には十分注して下さい。 初期値は true です。
-
getNames
引数の名称配列。- 戻り値:
- 名称配列
-
setSqlType
【TAG】BODY部に書かれている Param の SQLタイプを指定します。- パラメータ:
type
- SQLタイプ- 変更履歴:
- 4.1.2.0 (2008/03/12) 新規追加
- 説明:
- TableUpdateParamTag は、上位の TableUpdateTag の sqlType 属性 と同じ sqlType 属性の場合のみ、SQL文を合成・出力します。 つまり、TableUpdateTag側のsqlType 属性をパラメータに、TableUpdateParamTag の sqlType 属性を固定値にすることで、どのパラメータを使用するかを 選択できる機能を実現する事が可能です。 7.2.9.3 (2020/11/06) 複数指定できるようにします。
-
setFollowCdkh
【TAG】DBTableModelの改廃Cに従って処理を行うかを指定します。- パラメータ:
flag
- 改廃C処理 [true:行う/false:行わない]- 変更履歴:
- 4.3.2.0 (2008/09/09) 新規追加
- 説明:
- この属性は、sqlTypeが指定されている場合のみ有効です。 sqlTypeが指定されている場合、そのsqlTypeに対応した、改廃Cが設定されている 行のみを処理します。 対応関係は、以下の通りです。 sqlType = "INSERT" or "COPY" ⇒ 改廃C='A'のみ処理 // * sqlType = "UPDATE" or "CHANGE" ⇒ 改廃C='C'のみ処理 sqlType = "UPDATE" or "MODIFY" ⇒ 改廃C='C'のみ処理 sqlType = "DELETE" ⇒ 改廃C='D'のみ処理
-
setQuotCheck
【TAG】リクエスト情報の シングルクォート(') 存在チェックを実施するかどうか[true/false]を設定します(初期値:false)。- オーバーライド:
setQuotCheck
クラス内QueryTag
- パラメータ:
flag
- クォートチェック [true:する/それ以外:しない]- 変更履歴:
- 5.1.7.0 (2010/06/01) 新規追加
- 説明:
- SQLインジェクション対策の一つとして、暫定的ではありますが、SQLのパラメータに 渡す文字列にシングルクォート(') を許さない設定にすれば、ある程度は防止できます。 数字タイプの引数には、 or 5=5 などのシングルクォートを使用しないコードを埋めても、 数字チェックで検出可能です。文字タイプの場合は、必ず (')をはずして、 ' or 'A' like 'A のような形式になる為、(')チェックだけでも有効です。 (') が含まれていたエラーにする(true)/かノーチェックか(false)を指定します。 ※(他のタグは、システムリソースのUSE_SQL_INJECTION_CHECK[=]) ですが、JSPの互換性を考慮し、初期値を固定でfalseにしています)
-
getSqlType
SQLタイプを返します。- 戻り値:
- SQLタイプ
- 変更履歴:
- 4.1.2.0 (2008/03/12) 新規追加
-
toString
このオブジェクトの文字列表現を返します。 基本的にデバッグ目的に使用します。
-