org.opengion.hayabusa.taglib

## クラス DirectTableInsertTag

- java.lang.Object
- - javax.servlet.jsp.tagext.TagSupport
  - - javax.servlet.jsp.tagext.BodyTagSupport
    - - org.opengion.hayabusa.taglib.CommonTagSupport
      - - org.opengion.hayabusa.taglib.DirectTableInsertTag

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

      public class DirectTableInsertTag
      extends CommonTagSupport

  指定のファイルを直接データベースに登録するデータ入力タグです。 通常の 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}) なども使用できます。 ※ このタグは、Transaction タグの対象です。
  関連項目:
    直列化された形式
  形式サンプル:

         ●形式：<og:directTableInsert filename="[･･･]" ･･･ >INSERT INTO ･･･ </og:directTableInsert >
         ●body：あり(EVAL_BODY_BUFFERED:BODYを評価し、{@XXXX} を解析します)

         ●Tag定義：
           <og:directTableInsert
               fileURL            【TAG】読み取り元ディレクトリ名を指定します (初期値:FILE_URL[=filetemp/])
               filename           【TAG】ファイルを作成するときのファイル名をセットします (初期値:FILE_FILENAME[=file.xls])
               encode             【TAG】ファイルを作成するときのファイルエンコーディング名をセットします (初期値:FILE_ENCODE[=UnicodeLittle])
               separator          【TAG】可変長ファイルを作成するときの項目区切り文字をセットします(初期値:タブ)
               displayMsg         【TAG】query の結果を画面上に表示するメッセージIDを指定します(初期値:MSG0040[　件登録しました])
               columns            【TAG】#NAME 属性の代わりとなるファイルのカラム名を CSV形式で指定します
               commitBatch        【TAG】指定数毎にコミットを発行します(初期値:0 終了までコミットしません)
               useColumnAdjust    【TAG】カラム変換(DBType変換)を行うかどうかを設定します(初期値:false)
               useColumnCheck     【TAG】カラムチェック(DBTypeチェック)を行うかどうかを設定します(初期値:false)
               nullCheck          【TAG】NULL チェックすべきカラム列をカンマ区切り(CSV形式)で指定します
               dbid               【TAG】(通常は使いません)検索時のDB接続IDを指定します(初期値:DEFAULT)
               skipRowCount       【TAG】データの読み飛ばし件数を設定します(初期値:0)
               stopZero           【TAG】検索結果が０件のとき処理を続行するかどうか[true/false]を指定します(初期値:false[続行する])
               storageType		【TAG】読み取り元ストレージタイプを指定します。
               bucketName			【TAG】読み取り元バケット名を指定します。
               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チェックを実行します。
                 storageType     = "aws"              読み取り元ストレージタイプ(初期値:CLOUD_STORAGE)
                 bucketName       = "mybucket001"       読み取り元バケット名(初期値:CLOUD_BUCKET)
             >
                  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 >

  変更履歴:

    5.10.9.0 (2019/03/01) oota クラウドストレージ対応を追加。(Fileクラスを拡張)

  機能分類
    ファイル入力
  バージョン
    4.0
  作成者
    Kazuhiko Hasegawa
  導入されたバージョン:
    JDK5.0,

- - ### ネストされたクラスのサマリー

    ネストされたクラス
    修飾子とタイプ | クラスと説明
    --- | ---
    `(package private) static class` | `DirectTableInsertTag.CheckColumnData` カラム変換、カラムチェックを行う内部クラス

  - ### フィールドのサマリー

    - ### クラスから継承されたフィールド javax.servlet.jsp.tagext.BodyTagSupport

      `bodyContent`

    - ### クラスから継承されたフィールド javax.servlet.jsp.tagext.TagSupport

      `id, pageContext`

    - ### インタフェースから継承されたフィールド javax.servlet.jsp.tagext.BodyTag

      `EVAL_BODY_BUFFERED, EVAL_BODY_TAG`

    - ### インタフェースから継承されたフィールド javax.servlet.jsp.tagext.IterationTag

      `EVAL_BODY_AGAIN`

    - ### インタフェースから継承されたフィールド javax.servlet.jsp.tagext.Tag

      `EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE`

  - ### コンストラクタのサマリー

    コンストラクタ
    コンストラクタと説明
    `DirectTableInsertTag()`

  - ### メソッドのサマリー

    メソッド
    修飾子とタイプ | メソッドと説明
    --- | ---
    `int` | `doAfterBody()` Taglibのタグ本体を処理する doAfterBody() を オーバーライドします。
    `int` | `doEndTag()` Taglibの終了タグが見つかったときに処理する doEndTag() を オーバーライドします。
    `int` | `doStartTag()` Taglibの開始タグが見つかったときに処理する doStartTag() を オーバーライドします。
    `protected void` | `release2()` タグリブオブジェクトをリリースします。
    `void` | `setBucketName(java.lang.String bucket)` 【TAG】読み取り元バケット名を設定します。
    `void` | `setColumns(java.lang.String clms)` 【TAG】#NAME 属性の代わりとなるファイルのカラム名を CSV形式で指定します。
    `void` | `setCommitBatch(java.lang.String cmtBat)` 【TAG】指定数毎にコミットを発行します(初期値:0 終了までコミットしません)。
    `void` | `setDbid(java.lang.String id)` 【TAG】(通常は使いません)検索時のDB接続IDを指定します(初期値:DEFAULT)。
    `void` | `setDisplayMsg(java.lang.String id)` 【TAG】query の結果を画面上に表示するメッセージIDを指定します(初期値:MSG0040[　件登録しました])。
    `void` | `setEncode(java.lang.String enc)` 【TAG】ファイルを作成するときのファイルエンコーディング名をセットします (初期値:FILE_ENCODE[=UnicodeLittle])。
    `void` | `setFilename(java.lang.String filename)` 【TAG】ファイルを作成するときのファイル名をセットします (初期値:FILE_FILENAME[=file.xls])。
    `void` | `setFileURL(java.lang.String url)` 【TAG】読み取り元ディレクトリ名を指定します (初期値:FILE_URL[=filetemp/])。
    `void` | `setNullCheck(java.lang.String clms)` 【TAG】NULL チェックすべきカラム列をカンマ区切り(CSV形式)で指定します。
    `void` | `setSeparator(java.lang.String separator)` 【TAG】可変長ファイルを作成するときの項目区切り文字をセットします(初期値:タブ)。
    `void` | `setSkipRowCount(java.lang.String count)` 【TAG】取り込み時に除外する行を指定します(初期値:0)。
    `void` | `setStopZero(java.lang.String cmd)` 【TAG】検索結果が０件のとき処理を続行するかどうか[true/false]を指定します(初期値:false[続行する])。
    `void` | `setStorageType(java.lang.String storage)` 【TAG】読み取り元ストレージタイプを設定します。
    `void` | `setUseColumnAdjust(java.lang.String flag)` 【TAG】カラム変換(DBType変換)を行うかどうかを設定します(初期値:false)。
    `void` | `setUseColumnCheck(java.lang.String flag)` 【TAG】カラムチェック(DBTypeチェック)を行うかどうかを設定します(初期値:false)。
    `java.lang.String` | `toString()` このオブジェクトの文字列表現を返します。

    - ### クラスから継承されたメソッド org.opengion.hayabusa.taglib.CommonTagSupport

      `add, add, addEventColumn, addEventColumn, check, check, commitTableObject, debugPrint, doCatch, doFinally, get, getApplicationInfo, getAttributes, getBodyRawString, getBodyString, getContextAttribute, getContextPath, getCookie, getCSVParameter, getDataCondition, getDateFormat, getDBColumn, getDBFunctionName, getDocumentLink, getGUIInfo, getGUIInfoAttri, getHostName, getLabel, getLabelInterface, getLanguage, getLASTAttri, getLongLabel, getMsglbl, getNVLAttri, getObject, getParameterNames, getParameterRows, getRequest, getRequestAttribute, getRequestCacheData, getRequestMethod, getRequestParameter, getRequestParameterValues, getRequestValue, getRequestValue, getRequestValues, getReservedParameter, getReservedValue, getResource, getSanitizedBodyString, getScope, getSessionAttribute, getTagName, getUser, getUserEditInfo, getUserInfo, isAjaxSubmitRequest, isDebug, isNoTransitionRequest, isNull, jspPrint, removeContextAttribute, removeObject, removeRequestAttribute, removeSessionAttribute, set, setAjaxSubmitRequest, 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`

    - ### クラスから継承されたメソッド java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

    - ### インタフェースから継承されたメソッド javax.servlet.jsp.tagext.Tag

      `getParent, setPageContext, setParent`

- - ### コンストラクタの詳細

    - #### DirectTableInsertTag

          public DirectTableInsertTag()

  - ### メソッドの詳細

    - #### doStartTag

          public int doStartTag()

      Taglibの開始タグが見つかったときに処理する doStartTag() を オーバーライドします。
      定義:
        `doStartTag` インタフェース内 `Tag`
      オーバーライド:
        `doStartTag` クラス内 `CommonTagSupport`
      戻り値:
        後続処理の指示( EVAL_BODY_BUFFERED )

    - #### doAfterBody

          public int 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 文の前後のスペースを取り除きます。

    - #### doEndTag

          public int doEndTag()

      Taglibの終了タグが見つかったときに処理する doEndTag() を オーバーライドします。
      定義:
        `doEndTag` インタフェース内 `Tag`
      オーバーライド:
        `doEndTag` クラス内 `CommonTagSupport`
      戻り値:
        後続処理の指示
      変更履歴:

        4.0.0.0 (2007/10/18) メッセージリソース統合( getResource().getMessage ⇒ getResource().getLabel )
        5.7.0.3 (2013/11/22) BufferedReaderのcloseをcreate内で行うように変更
        5.7.6.2 (2014/05/16) stopZero属性、DB.COUNT キーで検索件数をリクエストにセットする。

    - #### release2

          protected void release2()

      タグリブオブジェクトをリリースします。 キャッシュされて再利用されるので、フィールドの初期設定を行います。
      オーバーライド:
        `release2` クラス内 `CommonTagSupport`
      変更履歴:

        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属性追加
        5.10.9.0 (2019/03/01) storageType,bucketName属性を追加

    - #### setDbid

          public void setDbid(java.lang.String id)

      【TAG】(通常は使いません)検索時のDB接続IDを指定します(初期値:DEFAULT)。
      パラメータ:
        `id` - データベース接続ID
      説明:

             検索時のDB接続IDを指定します。初期値は、DEFAULT です。

    - #### setSeparator

          public void setSeparator(java.lang.String separator)

      【TAG】可変長ファイルを作成するときの項目区切り文字をセットします(初期値:タブ)。
      パラメータ:
        `separator` - 項目区切り文字
      説明:

             可変長ファイルを作成するときの項目区切り文字をセットします。

    - #### setFileURL

          public void setFileURL(java.lang.String url)

      【TAG】読み取り元ディレクトリ名を指定します (初期値:FILE_URL[=filetemp/])。
      パラメータ:
        `url` - ファイルURL
      関連項目:
        `SystemData.FILE_URL`
      説明:

             この属性で指定されるディレクトリより、ファイルを読み取ります。
             指定方法は、通常の fileURL 属性と同様に、先頭が、'/' (UNIX) または、２文字目が、
             ":" (Windows)の場合は、指定のURLそのままのディレクトリに、そうでない場合は、
             fileURL = "{@USER.ID}" と指定すると、FILE_URL 属性で指定のフォルダの下に、
             さらに、各個人ID別のフォルダの下より、読み取ります。
             (初期値:システム定数のFILE_URL[={@og.value org.opengion.hayabusa.common.SystemData#FILE_URL}])。

      変更履歴:

        4.0.0.0 (2005/01/31) StringUtil.urlAppend メソッドの利用
        4.0.0.0 (2007/11/20) 指定されたディレクトリ名の最後が"\"or"/"で終わっていない場合に、"/"を付加する。

    - #### setFilename

          public void setFilename(java.lang.String filename)

      【TAG】ファイルを作成するときのファイル名をセットします (初期値:FILE_FILENAME[=file.xls])。
      パラメータ:
        `filename` - ファイル名
      関連項目:
        `SystemData.FILE_FILENAME`
      説明:

             ファイルを作成するときのファイル名をセットします。
             (初期値:システム定数のFILE_FILENAME[={@og.value org.opengion.hayabusa.common.SystemData#FILE_FILENAME}])。

    - #### setEncode

          public void setEncode(java.lang.String enc)

      【TAG】ファイルを作成するときのファイルエンコーディング名をセットします (初期値:FILE_ENCODE[=UnicodeLittle])。
      パラメータ:
        `enc` - ファイルエンコーディング名
      関連項目:
        IANA Charset Registry, `SystemData.FILE_ENCODE`
      説明:

             初期値は、システムパラメータ の FILE_ENCODE 属性で、設定しています。
             Shift_JIS,MS932,Windows-31J,UTF-8,ISO-8859-1,UnicodeLittle･･･
             (初期値:システム定数のFILE_ENCODE[={@og.value org.opengion.hayabusa.common.SystemData#FILE_ENCODE}])。

    - #### setDisplayMsg

          public void setDisplayMsg(java.lang.String id)

      【TAG】query の結果を画面上に表示するメッセージIDを指定します(初期値:MSG0040[　件登録しました])。
      パラメータ:
        `id` - ディスプレイに表示させるメッセージ ID
      説明:

             ここでは、検索結果の件数や登録された件数をまず出力し、
             その次に、ここで指定したメッセージをリソースから取得して
             表示します。
             表示させたくない場合は, displayMsg = "" をセットしてください。
             初期値は、検索件数を表示します。
             ※ この属性には、リクエスト変数({@XXXX})は使用できません。

    - #### setColumns

          public void setColumns(java.lang.String clms)

      【TAG】#NAME 属性の代わりとなるファイルのカラム名を CSV形式で指定します。
      パラメータ:
        `clms` - ファイルのカラム名(カンマ区切り文字)
      説明:

             データファイルの先頭行に、#NAME 行があり、読み取るべきファイルの
             カラム名が記述されています。通常は、このカラム名を取り込んで、
             各データ列のカラムを指定します。
             この属性は、ファイルに#NAME 行が存在しない(他システムからの入力ファイル等)
             場合に、#NAME 属性の代わりに、カラム名を外部より指定します。

      変更履歴:

        3.8.5.1 (2006/05/08) getCSVParameter の使用を中止

    - #### setCommitBatch

          public void setCommitBatch(java.lang.String cmtBat)

      【TAG】指定数毎にコミットを発行します(初期値:0 終了までコミットしません)。
      パラメータ:
        `cmtBat` - 指定数毎にコミットを発行(初期値:0)
      説明:

             通常は、全ての処理が正常に終了するか、なにもしないか(トランザクション)
             を判断すべきで、途中でのコミットはしません。
             しかし、場合によって、件数が異常に多い場合や、再実行可能な場合は、
             途中でコミットして、都度、処理できるものだけを処理してしまうという方法があります。
             また、ロールバックエリアの関係などで、データ量が多い場合に、処理時間が異常に
             長くなる事があり、指定件数ごとのコミット機能を用意しています。
             0 に設定すると、終了までコミットしません。初期値は、0 です。

    - #### setUseColumnCheck

          public void setUseColumnCheck(java.lang.String flag)

      【TAG】カラムチェック(DBTypeチェック)を行うかどうかを設定します(初期値:false)。
      パラメータ:
        `flag` - チェックを行うかどうか(true:行う/false:行わない)
      関連項目:
        `setUseColumnAdjust( String )`
      説明:

             カラムの整合性チェックを行う場合、この属性を設定(true)します。
             初期値は、行わない(false)です。
             チェックするカラムは、#NAME や columns で指定されたカラムではなく、
             BODY部のSQL文で指定されたカラム名( [カラム名] )です。これは、直接、SQL文中に
             記述している値や、{@XXXX}文字等は、チェック出来ない為です。

      変更履歴:

        3.6.0.2 (2004/10/04) 新規追加 取り込み時全チェック

    - #### setUseColumnAdjust

          public void setUseColumnAdjust(java.lang.String flag)

      【TAG】カラム変換(DBType変換)を行うかどうかを設定します(初期値:false)。
      パラメータ:
        `flag` - 変換を行うかどうか(true:行う/false:行わない)
      関連項目:
        `setUseColumnCheck( String )`
      説明:

             カラムの変換を行う場合、この属性を設定(true)します。
             初期値は、行わない(false)です。
             変換するカラムは、#NAME や columns で指定されたカラムではなく、
             BODY部のSQL文で指定されたカラム名[カラム名]です。これは、直接、SQL文中に
             記述している値や、{@XXXX}文字等は、変換出来ない為です。

      変更履歴:

        3.6.0.2 (2004/10/04) 新規追加 取り込み時変換

    - #### setNullCheck

          public void setNullCheck(java.lang.String clms)

      【TAG】NULL チェックすべきカラム列をカンマ区切り(CSV形式)で指定します。
      パラメータ:
        `clms` - カラム列(CSV形式)
      説明:

             nullCheck="AAA,BBB,CCC,DDD"
             分解方法は、通常のパラメータ取得後に、CSV分解します。

      変更履歴:

        3.8.0.2 (2005/06/30) 新規追加
        3.8.8.5 (2007/03/09) 通常のパラメータ取得後に、CSV分解に戻します。

    - #### setSkipRowCount

          public void setSkipRowCount(java.lang.String count)

      【TAG】取り込み時に除外する行を指定します(初期値:0)。
      パラメータ:
        `count` - 先頭行を無視するかどうか(true:無視する/false:無視しない)
      説明:

             TAB区切りテキストやEXCEL等のデータの読み始めの初期値を指定します。
             ファイルの先頭行が、０行としてカウントしますので、設定値は、読み飛ばす
             件数になります。(１と指定すると、１件読み飛ばし、２行目から読み込みます。)
             読み飛ばしは、コメント行などは、無視しますので、実際の行数分読み飛ばします。
             ＃NAME属性や、columns 属性は、有効です。

      変更履歴:

        5.5.7.1 (2012/10/05) 新規追加

    - #### setStopZero

          public void setStopZero(java.lang.String cmd)

      【TAG】検索結果が０件のとき処理を続行するかどうか[true/false]を指定します(初期値:false[続行する])。
      パラメータ:
        `cmd` - 検索結果が０件のとき、[true:処理を中止する/false:続行する]
      説明:

             初期値は、false(続行する)です。

      変更履歴:

        5.7.6.2 (2014/05/16) 新規追加

    - #### setStorageType

          public void setStorageType(java.lang.String storage)

      【TAG】読み取り元ストレージタイプを設定します。
      パラメータ:
        `storage` - 読み取り元ストレージタイプ
      説明:

             ファイルを読み取り元の、ストレージタイプを設定します。
             未設定の場合は、システムリソースの「CLOUD_TARGET」が参照されます。
             自身のサーバを指定する場合は、「default」を設定してください。

      変更履歴:

        5.10.9.0 (2019/03/01) 新規追加

    - #### setBucketName

          public void setBucketName(java.lang.String bucket)

      【TAG】読み取り元バケット名を設定します。
      パラメータ:
        `bucket` - 読み取り元バケット名
      説明:

             ファイルを読み取り元の、バケット名を指定します。
             クラウドストレージ利用時のみ有効です。
             未設定の場合は、システムリソースの「CLOUD_BUKET」が参照されます。

      変更履歴:

        5.10.9.0 (2019/03/01) 新規追加

    - #### toString

          public java.lang.String toString()

      このオブジェクトの文字列表現を返します。 基本的にデバッグ目的に使用します。
      オーバーライド:
        `toString` クラス内 `CommonTagSupport`
      戻り値:
        このクラスの文字列表現
      変更履歴:

        5.10.9.0 (2019/03/01) storageType, bucketNameを出力対象に追加。

Webアプリケーションフレームワーク openGion
Copyright (c) 2009 The openGion Project.