クラス DirectTableInsertTag
java.lang.Object
jakarta.servlet.jsp.tagext.TagSupport
jakarta.servlet.jsp.tagext.BodyTagSupport
org.opengion.hayabusa.taglib.CommonTagSupport
org.opengion.hayabusa.taglib.ExcelSheetSupport
org.opengion.hayabusa.taglib.ReadTableTag
org.opengion.hayabusa.taglib.DirectTableInsertTag
- すべての実装されたインタフェース:
BodyTag
,IterationTag
,JspTag
,Tag
,TryCatchFinally
,Serializable
指定のファイルを直接データベースに登録するデータ入力タグです。
通常の readTable などは、DBTableModelオブジェクトを介して全件メモリに
ロードしてから表示させる為、大量データ処理ができません。
このタグでは、直接ファイルを読み取りながらデータベース登録するので
大量データをバッチ的に登録する場合に使用します。
読み取るファイルは、先頭(または実データが現れるまでに) #NAME 行が必要です。
これは、ファイルデータのカラム名を指定しています。また、columns 属性を使用すれば、
ファイルの#NAME 行より優先して(つまり存在していなくても良い)データのカラム名を
指定することが出来ます。
この#NAME 行は、ファイルのセパレータと無関係に必ずタブ区切りで用意されています。
タグのBODY部に、実行するSQL文を記述します。
このSQL文は、
INSERT INTO GE41 (CLM,NAME_JA,SYSTEM_ID,FGJ,DYSET)
VALUES ([CLM],[NAME_JA],[SYSTEM_ID],'1','{@USER.YMDH}')
と、いう感じで、ファイルから読み込んだ値は、[カラム名]に割り当てられます。
もちろん、通常の固定値(FGJに'1'をセット)や、リクエスト変数(DYSETの{@USER.YMDH})
なども使用できます。
※ 6.2.3.0 (2015/05/01)
BODY部にSQL文を記述しない場合は、table 属性に、INSERTするテーブルIDを指定します。
※ 6.2.4.0 (2015/05/15)
omitNames に、WRITABLE と ROWID を、強制的に含めます(無条件)。
※ 7.3.1.3 (2021/03/09) DB.NAMES , DB.ORGNAMES
#NAME や columns で指定したカラムは、{@DB.NAMES} で取り出すことが可能です。
ファイルにかかれた、オリジナルの #NAME は、{@DB.ORGNAMES} で取り出すことが可能です。
※ このタグは、Transaction タグの対象です。
- 関連項目:
- 機能分類
- ファイル入力
- 形式サンプル:
- ●形式:<og:directTableInsert filename="[・・・]" ・・・ >INSERT INTO ・・・ </og:directTableInsert > ●body:あり(EVAL_BODY_BUFFERED:BODYを評価し、{@XXXX} を解析します) ●Tag定義: <og:directTableInsert readerClass 【TAG】実際に読み出すクラス名の略称(TableReader_**** の ****)をセットします (初期値:TABLE_READER_DEFAULT_CLASS[=]) 専 commitBatch 【TAG】指定数毎にコミットを発行します(初期値:0 終了までコミットしません) 専 dbid 【TAG】(通常は使いません)検索時のDB接続IDを指定します(初期値:DEFAULT) 専 table 【TAG】BODYのSQL文を指定しない場合に使用するテーブルIDを指定します command 【TAG】コマンド (NEW,RENEW)をセットします(初期値:NEW) fileURL 【TAG】読取元ディレクトリ名を指定します(初期値:FILE_URL) filename 【TAG】ファイルを作成するときのファイル名をセットします (初期値:FILE_FILENAME[=file.xls]) encode 【TAG】ファイルを作成するときのファイルエンコーディング名をセットします(初期値:FILE_ENCODE) skipRowCount 【TAG】(通常は使いません)データの読み飛ばし件数を設定します maxRowCount 【TAG】読取時の最大取り込み件数をセットします (初期値:0:[無制限]) errRowCount 【TAG】読取時の最大エラー件数をセットします (初期値:)(0:[無制限]) separator 【TAG】可変長ファイルを作成するときの項目区切り文字をセットします columns 【TAG】読取元ファイルのカラム列を、外部(タグ)よりCSV形式で指定します omitNames 【TAG】読取対象外のカラム列を、外部(タグ)よりCSV形式で指定します modifyType 【TAG】ファイル取り込み時の モディファイタイプ(A(追加),C(更新),D(削除))を指定します displayMsg 【TAG】query の結果を画面上に表示するメッセージIDを指定します(初期値:VIEW_DISPLAY_MSG[=])) overflowMsg 【TAG】読取データが最大検索数をオーバーした場合に表示するメッセージリソースIDを指定します (初期値:MSG0007[検索結果が、制限行数を超えましたので、残りはカットされました]) notfoundMsg 【TAG】検索結果がゼロ件の場合に表示するメッセージリソースIDを指定します(初期値:MSG0077[対象データはありませんでした]) ※ sheetName 【TAG】EXCELファイルを読み込むときのシート名を設定します(初期値:指定なし) ※ sheetNos 【TAG】EXCELファイルを読み込むときのシート番号を複数設定できます(初期値:0) ※ sheetConstKeys 【TAG】EXCELファイルを読み込むときの固定値となるカラム名(CSV形式) ※ sheetConstAdrs 【TAG】EXCELファイルを読み込むときの固定値となるアドレス(行-列,行-列,・・・) nullBreakClm 【TAG】カラム列に NULL が現れた時点で読取を中止します(複数Sheetの場合は、次のSheetを読みます)。 nullSkipClm 【TAG】カラム列に NULL が現れたレコードは読み飛ばします。 useNumber 【TAG】行番号情報を、使用している/していない[true/false]を指定します(初期値:true) useRepeatClms 【TAG】読取処理で横持ちデータの繰り返しが存在する場合に、trueを指定します(初期値:false) 7.3.0.0 (2021/01/06) useRenderer 【TAG】読取処理でKEY:VAL形式のコードリソースから、KEYを取り出す処理を行うかどうかを指定します(初期値:USE_TABLE_READER_RENDERER[=false]) adjustColumns 【TAG】読取元ファイルのデータ変換を行うカラム列をカンマ指定します checkColumns 【TAG】読取元ファイルの整合性チェックを行うカラム列をカンマ指定します useStrict 【TAG】整合性チェック時に、厳密にチェックするかどうか[true/false]を指定します(初期値:true) 7.3.2.0 (2021/03/19) nullCheck 【TAG】NULL チェックすべきカラム列をCSV形式(CSV形式)で指定します matchKeys 【TAG】レコードの読取条件指定時のカラム列をCSV形式で指定します 6.4.6.0 (2016/05/27) matchVals 【TAG】レコードの読取条件指定時のカラム列に対応する正規表現データをCSV形式で指定します 6.4.6.0 (2016/05/27) language 【TAG】タグ内部で使用する言語コード[ja/en/zh/…]を指定します stopZero 【TAG】読込件数が0件のとき処理を続行するかどうか[true/false]を指定します(初期値:false[続行する]) mainTrans 【TAG】(通常は使いません)タグで処理される処理がメインとなるトランザクション処理かどうかを指定します(初期値:false) tableId 【TAG】(通常は使いません)sessionから所得する DBTableModelオブジェクトの ID scope 【TAG】キャッシュする場合のスコープ[request/session/application]を指定します (初期値:session) useTimeView 【TAG】処理時間を表示する TimeView を表示するかどうかを指定します (初期値:VIEW_USE_TIMEBAR[=])。 useSLabel 【TAG】7.0.7.0 (2019/12/13) エラーメッセージにSLABELを利用するかどうか[true/false]を指定します(初期値:false) useLocal 【TAG】システム定数でクラウド設定されていても、クラウド環境を使用しない場合、trueを指定します(初期値:false) 8.0.1.0 (2021/10/29) caseKey 【TAG】このタグ自体を利用するかどうかの条件キーを指定します(初期値:null) 5.7.7.2 (2014/06/20) caseVal 【TAG】このタグ自体を利用するかどうかの条件値を指定します(初期値:null) 5.7.7.2 (2014/06/20) caseNN 【TAG】指定の値が、null/ゼロ文字列 でない場合(Not Null=NN)は、このタグは使用されます(初期値:判定しない) 5.7.7.2 (2014/06/20) caseNull 【TAG】指定の値が、null/ゼロ文字列 の場合は、このタグは使用されます(初期値:判定しない) 5.7.7.2 (2014/06/20) caseIf 【TAG】指定の値が、true/TRUE文字列の場合は、このタグは使用されます(初期値:判定しない) debug 【TAG】デバッグ情報を出力するかどうか[true/false]を指定します(初期値:false) > ... Body ... </og:directTableInsert> ●使用例 <og:directTableInsert dbid = "ORCL" 接続データベースID(初期値:DEFAULT) separator = "," ファイルの区切り文字(初期値:タブ) fileURL = "{@USER.ID}" 読み取り元ディレクトリ名 filename = "{@filename}" 読み取り元ファイル名 encode = "Shift_JIS" 読み取り元ファイルエンコード名 displayMsg = "MSG0040" 登録完了後のメッセージ columns = "CLM,NAME_JA,LABEL_NAME,KBSAKU,SYSTEM_ID,LANG" #NAME の代わりに使用するカラム列名 commitBatch = "100" この件数ずつコミットを発行(初期値:無制限) useColumnCheck = "true" カラムチェックを行うかどうか(初期値:false) useColumnAdjust = "true" カラム変換を行うかどうか(初期値:false) nullCheck = "CLM,SYSTEM_ID" NULLチェックを実行します。 > 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:directTableInsert >
- 導入されたバージョン:
- JDK5.0,
-
ネストされたクラスの概要
クラスから継承されたネストされたクラス/インタフェース org.opengion.hayabusa.taglib.ReadTableTag
ReadTableTag.ColumnAction, ReadTableTag.RepeatDataChenge
-
フィールドの概要
クラスから継承されたフィールド org.opengion.hayabusa.taglib.ReadTableTag
clmAct, CMD_NEW, CMD_RENEW, columns, displayMsg, encode, executeCount, maxRowCount, nullBreakClm, nullSkipClm, readerClass, separator, skipRowCount, stopZero, useNumber, useSLabel
クラスから継承されたフィールド org.opengion.hayabusa.taglib.ExcelSheetSupport
sheetConstAdrs, sheetConstKeys, sheetName, sheetNos
クラスから継承されたフィールド 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
-
コンストラクタの概要
コンストラクタ -
メソッドの概要
修飾子とタイプメソッド説明protected int
afterEnd()
#doEndTag() の後続処理を記述します。protected void
ファイルオブジェクト より読み込み、データベースに書き込みます。int
Taglibのタグ本体を処理する doAfterBody() を オーバーライドします。int
Taglibの開始タグが見つかったときに処理する doStartTag() を オーバーライドします。protected void
release2()
タグリブオブジェクトをリリースします。void
setCommitBatch
(String cmtBat) 【TAG】指定数毎にコミットを発行します(初期値:0 終了までコミットしません)。void
【TAG】(通常は使いません)検索時のDB接続IDを指定します(初期値:DEFAULT)。void
【TAG】BODYのSQL文を指定しない場合に使用するテーブルIDを指定します。void
setUseTimeView
(String flag) 【TAG】処理時間を表示する TimeView を表示するかどうか[true:する/false:しない]を指定します (初期値:VIEW_USE_TIMEBAR[=])。toString()
このオブジェクトの文字列表現を返します。クラスから継承されたメソッド org.opengion.hayabusa.taglib.ReadTableTag
addOmitNames, doEndTag, setAdjustColumns, setCheckColumns, setColumns, setCommand, setDisplayMsg, setEncode, setErrRowCount, setFilename, setFileURL, setMainTrans, setMatchKeys, setMatchVals, setMaxRowCount, setModifyType, setNotfoundMsg, setNullBreakClm, setNullCheck, setNullSkipClm, setOmitNames, setOverflowMsg, setReaderClass, setSeparator, setSkipRowCount, setStopZero, setTableId, setUseLocal, setUseNumber, setUseRenderer, setUseRepeatClms, setUseSLabel, setUseStrict
クラスから継承されたメソッド org.opengion.hayabusa.taglib.ExcelSheetSupport
setSheetConstAdrs, setSheetConstKeys, setSheetName, setSheetNos
クラスから継承されたメソッド 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, getParameterRows, 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
-
コンストラクタの詳細
-
DirectTableInsertTag
public DirectTableInsertTag()デフォルトコンストラクター- 変更履歴:
- 6.4.2.0 (2016/01/29) PMD refactoring. Each class should declare at least one constructor.
-
-
メソッドの詳細
-
doStartTag
Taglibの開始タグが見つかったときに処理する doStartTag() を オーバーライドします。- 定義:
doStartTag
インタフェース内Tag
- オーバーライド:
doStartTag
クラス内CommonTagSupport
- 戻り値:
- 後続処理の指示( EVAL_BODY_BUFFERED )
- 変更履歴:
- 6.2.2.0 (2015/03/27) ColumnActionListener 対応。, 6.2.3.0 (2015/05/01) table属性追加。BODYのSQL文が無くても、table属性で自動生成します。, 6.2.4.0 (2015/05/15) 無条件でOMITする名称を指定します。
-
doAfterBody
Taglibのタグ本体を処理する doAfterBody() を オーバーライドします。- 定義:
doAfterBody
インタフェース内IterationTag
- オーバーライド:
doAfterBody
クラス内CommonTagSupport
- 戻り値:
- 後続処理の指示(SKIP_BODY)
- 変更履歴:
- 3.6.0.2 (2004/10/04) SQL文の [カラム] 対応とパーサー機能追加, 3.8.6.3 (2006/11/30) SQL 文の前後のスペースを取り除きます。, 6.2.3.0 (2015/05/01) table属性追加。BODYのSQL文が無くても、table属性で自動生成します。
-
afterEnd
#doEndTag() の後続処理を記述します。 これは、サブクラスで、DBTableModel以外の処理を行う場合に、 処理内容を分けるために用意します。- オーバーライド:
afterEnd
クラス内ReadTableTag
- 戻り値:
- 後続処理の指示
- 変更履歴:
- 6.2.2.0 (2015/03/27) #afterEnd() メソッド 新規作成。, 6.2.5.0 (2015/06/05) AutoReaderの仕様変更。checkColumns エラー処理が抜けていたので、追加します。, 7.0.7.0 (2019/12/13) useSLabel 属性を追加。
-
release2
タグリブオブジェクトをリリースします。 キャッシュされて再利用されるので、フィールドの初期設定を行います。- オーバーライド:
release2
クラス内ReadTableTag
- 変更履歴:
- 3.6.0.2 (2004/10/04) useColumnCheck,useColumnAdjust 属性追加, 3.8.0.2 (2005/06/30) nullCheck 属性追加, 4.0.0.0 (2007/10/10) dbid の初期値を、"DEFAULT" から null に変更, 5.5.7.1 (2012/10/05) skipRowCount追加, 5.7.6.2 (2014/05/16) stopZero属性追加, 6.2.2.0 (2015/03/27) ColumnActionListener 対応。, 6.2.3.0 (2015/05/01) table属性追加
-
create
ファイルオブジェクト より読み込み、データベースに書き込みます。- オーバーライド:
create
クラス内ReadTableTag
- パラメータ:
file
- ファイルオブジェクト- 変更履歴:
- 3.6.0.2 (2004/10/04) カラムオブジェクトのDBType属性の整合性チェック, 3.8.0.2 (2005/06/30) nullチェック確認, 3.8.5.1 (2006/05/08) 取込データが name 列より少ない場合の対応を追加, 3.8.7.0 (2006/12/15) アクセスログ取得の為、ApplicationInfoオブジェクトを設定, 4.0.0.0 (2005/01/31) CheckColumnDataクラス static 化、引数にResourceManager追加, 4.0.0.1 (2007/12/03) try ~ catch ~ finally をきちんと行う。, 5.1.9.0 (2010/08/01) Transaction 対応, 5.2.2.0 (2010/11/01)) ""で囲われているデータに改行が入っていた場合の対応, 5.3.7.0 (2011/07/01) TransactionReal の引数変更, 5.3.8.0 (2011/08/01) pstmt.setObject で、useParamMetaData の判定を避けるため、pstmt.setString で代用(PostgreSQL対応), 5.5.7.1 (2012/10/05) omitFirstLine対応, 5.7.0.3 (2013/11/22) BufferedReaderのclose処理をこのメソッド内のfinallyで行う, 6.2.2.0 (2015/03/27) ColumnActionListener 対応。, 6.2.3.0 (2015/05/01) 行読み飛ばし nullSkipClm追加, 6.2.4.2 (2015/05/29) executeCount の設定がおかしい。DirectTableInsertTagでは、初期値が -1 のため、件数が1件少なくなっていた。, 6.2.5.0 (2015/06/05) AutoReaderの仕様変更。checkColumns エラー処理が抜けていたので、追加します。, 6.3.6.1 (2015/08/28) Transaction でAutoCloseableを使用したtry-with-resources構築に対応。, 6.4.3.3 (2016/03/04) HybsSystem.newInstance(String,String) への置き換え。, 6.6.0.1 (2016/12/07) エンコードが複数ある場合、SQLのパースで、上書きするとカラム名が取れないバグ修正。, 7.0.4.3 (2019/07/15) AutoReaderでencode指定の場合、columnNamesを複数回通ることがあるため、executeCountは都度クリアする
-
setDbid
【TAG】(通常は使いません)検索時のDB接続IDを指定します(初期値:DEFAULT)。- パラメータ:
id
- データベース接続ID- 説明:
- 検索時のDB接続IDを指定します。初期値は、DEFAULT です。
-
setCommitBatch
【TAG】指定数毎にコミットを発行します(初期値:0 終了までコミットしません)。- パラメータ:
cmtBat
- コミットを発行する行数 (初期値:0)- 説明:
- 通常は、全ての処理が正常に終了するか、なにもしないか(トランザクション) を判断すべきで、途中でのコミットはしません。 しかし、場合によって、件数が異常に多い場合や、再実行可能な場合は、 途中でコミットして、都度、処理できるものだけを処理してしまうという方法があります。 また、ロールバックエリアの関係などで、データ量が多い場合に、処理時間が異常に 長くなる事があり、指定件数ごとのコミット機能を用意しています。 0 に設定すると、終了までコミットしません。初期値は、0 です。
-
setTable
【TAG】BODYのSQL文を指定しない場合に使用するテーブルIDを指定します。- パラメータ:
tbl
- テーブルID- 変更履歴:
- 6.2.3.0 (2015/05/01) table属性追加
- 説明:
- 通常は、BODYに記述したSQL文を実行しますが、テーブルIDを指定すると、 INSERT用のSQL文を自動作成します。 その場合は、BODYのSQL文は設定不要です。 また、FILE.NAME という文字列を指定した場合は、file1 に指定した ファイル名から、拡張子を取り除いた名称をテーブル名として使用します。
-
setUseTimeView
【TAG】処理時間を表示する TimeView を表示するかどうか[true:する/false:しない]を指定します (初期値:VIEW_USE_TIMEBAR[=])。- パラメータ:
flag
- 処理時間を表示 [true:する/false:しない]- 変更履歴:
- 6.3.6.0 (2015/08/16) useTimeView の初期値を、VIEW_USE_TIMEBAR にする。
- 説明:
- true に設定すると、処理時間を表示するバーイメージが表示されます。 これは、DB検索、APサーバー処理、画面表示の各処理時間をバーイメージで 表示させる機能です。処理時間の目安になります。 (初期値:VIEW_USE_TIMEBAR[=])。
-
toString
このオブジェクトの文字列表現を返します。 基本的にデバッグ目的に使用します。- オーバーライド:
toString
クラス内ReadTableTag
- 戻り値:
- このクラスの文字列表現
- このメソッドは、nullを返しません
-