クラス TableUpdateTag
- java.lang.Object
-
- javax.servlet.jsp.tagext.TagSupport
-
- javax.servlet.jsp.tagext.BodyTagSupport
-
- org.opengion.hayabusa.taglib.CommonTagSupport
-
- org.opengion.hayabusa.taglib.QueryTag
-
- org.opengion.hayabusa.taglib.TableUpdateTag
-
- すべての実装されたインタフェース:
Serializable
,javax.servlet.jsp.tagext.BodyTag
,javax.servlet.jsp.tagext.IterationTag
,javax.servlet.jsp.tagext.JspTag
,javax.servlet.jsp.tagext.Tag
,javax.servlet.jsp.tagext.TryCatchFinally
public class TableUpdateTag extends QueryTag
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:update> ●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/page/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) 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>
- バージョン
- 4.0
- 作成者
- Kazuhiko Hasegawa
- 導入されたバージョン:
- JDK5.0,
-
-
フィールドの概要
フィールド 修飾子とタイプ フィールド 説明 static String
CMD_ENTRY
command 引数に渡す事の出来る コマンド 登録"ENTRY"-
クラスから継承されたフィールド 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
-
-
コンストラクタの概要
コンストラクタ コンストラクタ 説明 TableUpdateTag()
デフォルトコンストラクター
-
メソッドの概要
すべてのメソッド インスタンス・メソッド concreteメソッド 修飾子とタイプ メソッド 説明 int
doEndTag()
Taglibの終了タグが見つかったときに処理する doEndTag() を オーバーライドします。int
doStartTag()
Taglibの開始タグが見つかったときに処理する doStartTag() を オーバーライドします。protected void
execute(Query query)
Query を実行します。protected String[]
getNames()
引数の名称配列。protected int[]
getParameterRows()
表示データの HybsSystem.ROW_SEL_KEY を元に、選ばれた 行番号の 配列を返します。protected String
getSqlType()
SQLタイプを返します。protected void
release2()
タグリブオブジェクトをリリースします。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
setSqlType(String type)
【TAG】BODY部に書かれている Param の SQLタイプを指定します。String
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, doCatch, doFinally, get, getApplicationInfo, getAttributes, getBodyRawString, getBodyString, getContextAttribute, getContextPath, getCookie, getCSVParameter, getCSVParameter, getDataCondition, 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, useTag, useXssCheck
-
クラスから継承されたメソッド javax.servlet.jsp.tagext.BodyTagSupport
doInitBody, getBodyContent, getPreviousOut, release, setBodyContent
-
クラスから継承されたメソッド javax.servlet.jsp.tagext.TagSupport
findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
-
-
-
-
メソッドの詳細
-
doStartTag
public int doStartTag()
Taglibの開始タグが見つかったときに処理する doStartTag() を オーバーライドします。- 定義:
doStartTag
インタフェース内javax.servlet.jsp.tagext.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
public int doEndTag()
Taglibの終了タグが見つかったときに処理する doEndTag() を オーバーライドします。- 定義:
doEndTag
インタフェース内javax.servlet.jsp.tagext.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
protected void release2()
タグリブオブジェクトをリリースします。 キャッシュされて再利用されるので、フィールドの初期設定を行います。
-
execute
protected void execute(Query query)
Query を実行します。
-
getParameterRows
protected int[] 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の判定を、正規表現に変更
- このメソッドは、nullを返しません
-
setQueryType
public void setQueryType(String id)
【TAG】Query を発行する為のクラスID(JDBCTableUpdate,JDBCTableMerge)を指定します()。- オーバーライド:
setQueryType
クラス内QueryTag
- パラメータ:
id
- Queryタイプ- 関連項目:
Queryのサブクラス
,Query.execute( int[] ,DBTableModel )
- 説明:
- 引数指定のUPDATE,INSERT,DELETE文を実行する場合の、queryType 属性を使用します。 このタグでは、execute( int[] ,DBTableModel )を実行します。 代表的なクラスとして、"JDBCTableUpdate" が標準で用意されています。 タグにより使用できる/出来ないがありますが、これは、org.opengion.hayabusa.db 以下の Query_**** クラスの **** を与えます。 これらは、Query インターフェースを継承したサブクラスです。
-
setResourceType
public void setResourceType(String type)
【特殊】クリアするリソースの種類[GEA03/GEA04/GEA08]を指定します。- パラメータ:
type
- クリアリソースタイプ [GEA03/GEA04/GEA08]- 説明:
- 注意:この属性は、リソース関連DBのメンテナンス時にのみ、内部リソースキャッシュを クリアする目的で使用します。一般の属性としては、使用することはないため、 ご注意ください。 リソース関連のテーブルを更新した場合、リソースキャッシュをクリアして 置かないと、データベースの値が反映されません。 昔は、リソースの更新ごとに、全件クリアしていましたが、部分クリアが できるようになったため、部分クリアを行います。 こでは、(GEA03,GEA04,GEA08) のどれかを指定してください。
-
setConditionKey
public void setConditionKey(String key)
【TAG】条件判定するカラムIDを指定します(初期値:null)。- パラメータ:
key
- 条件判定カラム- 関連項目:
setConditionList( String )
- 説明:
- 指定のカラムIDの値と、conditionList の値を比較して、 存在する場合は、Query 処理を実行します。 例えば、conditionKey="CDKH" として、conditionList="A" とすれば、 改廃コードが"A"のデータで、かつ選択されたデータのみを処理します。 設定しない場合は、通常の処理と同様に、選択行のみ処理されます。
-
setConditionList
public void setConditionList(String list)
【TAG】条件判定する値のリストを、"|"で区切って登録します(初期値:無条件)。- パラメータ:
list
- 条件判定値 ("|"区切のリスト)- 関連項目:
setConditionKey( String )
- 変更履歴:
- 7.0.1.8 (2019/01/28) conditionListの判定を、正規表現に変更
- 説明:
- conditionKey とペアで指定します。ここには、カラムの設定値のリストを 指定することで、複数条件(OR結合)での比較を行い、リストにカラム値が 存在する場合のみ、Query 処理を実行します。 値が設定されている場合は、その値とマッチする必要があります。なにもセット されない場合、または、null の場合は、null データとマッチする場合のみ処理 されますので、ご注意ください。
-
setSelectedAll
public void setSelectedAll(String all)
【TAG】データを全件選択済みとして処理するかどうか[true/false]を指定します(初期値:false)。- パラメータ:
all
- データを全件選択済み [true:全件選択済み/false:通常]- 説明:
- 全てのデータを選択済みデータとして扱って処理します。 全件処理する場合に、(true/false)を指定します。 初期値は false です。
-
setCommitTableModel
public void setCommitTableModel(String commitTblMdl)
【特殊】SQL実行後に結果をDBTableModelに反映させるかどうか[true/false]を指定します(初期値:true)。- パラメータ:
commitTblMdl
- 反映有無 [true:反映する/false:反映しない]- 変更履歴:
- 4.0.2.0 (2007/12/25) 新規作成
- 説明:
- 注意:この属性は、リソース関連DBのメンテナンス時に、複数DBへの登録を行うための、 暫定対応として定義しています。 falseにした場合は、実データとDBTableModelの整合性が取れなくなるため、使用には十分注して下さい。 初期値は true です。
-
getNames
protected String[] getNames()
引数の名称配列。- 戻り値:
- 名称配列
-
setSqlType
public void setSqlType(String type)
【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
public void setFollowCdkh(String flag)
【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
public void setQuotCheck(String flag)
【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
protected String getSqlType()
SQLタイプを返します。- 戻り値:
- SQLタイプ
- 変更履歴:
- 4.1.2.0 (2008/03/12) 新規追加
-
-