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.ReadTableTag
        - - org.opengion.hayabusa.taglib.DirectTableInsertTag

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

      public class DirectTableInsertTag
      extends ReadTableTag

       指定のファイルを直接データベースに登録するデータ入力タグです。

       通常の 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 を、強制的に含めます(無条件)。

       ※ このタグは、Transaction タグの対象です。

  関連項目:
    直列化された形式
  形式サンプル:

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

         ●Tag定義：
           <og:directTableInsert
               readerClass        【TAG】実際に読み出すクラス名の略称(TableReader_**** の ****)をセットします
                                          (初期値:TABLE_READER_DEFAULT_CLASS[=AutoReader])
          専   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】読取時の最大エラー件数をセットします (初期値:200)(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)
               useRenderer        【TAG】読取処理でKEY:VAL形式のコードリソースから、KEYを取り出す処理を行うかどうかを指定します(初期値:USE_TABLE_READER_RENDERER[=false])
               adjustColumns      【TAG】読取元ファイルのデータ変換を行うカラム列をカンマ指定します
               checkColumns       【TAG】読取元ファイルの整合性チェックを行うカラム列をカンマ指定します
               nullCheck          【TAG】NULL チェックすべきカラム列をCSV形式(CVS形式)で指定します
               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】読込件数が０件のとき処理を続行するかどうか[true/false]を指定します(初期値:false[続行する])
               mainTrans          【TAG】(通常使いません)タグで処理される処理がメインとなるトランザクション処理かどうかを指定します(初期値:false)
               tableId            【TAG】(通常使いません)sessionから所得する DBTableModelオブジェクトの ID
               scope              【TAG】キャッシュする場合のスコープ[request/page/session/applicaton]を指定します(初期値:session)
               useTimeView        【TAG】処理時間を表示する TimeView を表示するかどうかを指定します
        										(初期値:VIEW_USE_TIMEBAR[=true])。
               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 >

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

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

    - ### クラスから継承されたネストされたクラス/インタフェース org.opengion.hayabusa.taglib.ReadTableTag

      `ReadTableTag.ColumnAction`

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

    - ### クラスから継承されたフィールド org.opengion.hayabusa.taglib.ReadTableTag

      `clmAct, CMD_NEW, CMD_RENEW, columns, displayMsg, encode, executeCount, maxRowCount, nullBreakClm, nullSkipClm, readerClass, separator, sheetConstAdrs, sheetConstKeys, sheetName, sheetNos, skipRowCount, sqlError, stopZero, useNumber`

    - ### クラスから継承されたフィールド org.opengion.hayabusa.taglib.CommonTagSupport

      `BR, BUFFER_MIDDLE, CR`

    - ### クラスから継承されたフィールド 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()` デフォルトコンストラクター

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

    すべてのメソッド インスタンス・メソッド concreteメソッド
    修飾子とタイプ | メソッドと説明
    --- | ---
    `protected int` | `afterEnd()` #doEndTag() の後続処理を記述します。
    `protected void` | `create(File file)` ファイルオブジェクト より読み込み、データベースに書き込みます。
    `int` | `doAfterBody()` Taglibのタグ本体を処理する doAfterBody() を オーバーライドします。
    `int` | `doStartTag()` Taglibの開始タグが見つかったときに処理する doStartTag() を オーバーライドします。
    `protected void` | `release2()` タグリブオブジェクトをリリースします。
    `void` | `setCommitBatch(String cmtBat)` 【TAG】指定数毎にコミットを発行します(初期値:0 終了までコミットしません)。
    `void` | `setDbid(String id)` 【TAG】(通常は使いません)検索時のDB接続IDを指定します(初期値:DEFAULT)。
    `void` | `setTable(String tbl)` 【TAG】BODYのSQL文を指定しない場合に使用するテーブルIDを指定します。
    `void` | `setUseTimeView(String flag)` 【TAG】処理時間を表示する TimeView を表示するかどうか[true:する/false:しない]を指定します (初期値:VIEW_USE_TIMEBAR[=true])。
    `String` | `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, setSheetConstAdrs, setSheetConstKeys, setSheetName, setSheetNos, setSkipRowCount, setStopZero, setTableId, setUseNumber, setUseRenderer`

    - ### クラスから継承されたメソッド 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, getLASTAttri, getLongLabel, getMsg, getMsglbl, getNVLAttri, getObject, getParameterNames, getParameterRows, getRequest, getRequestAttribute, getRequestCacheData, getRequestMethod, getRequestParameter, getRequestParameterValues, getRequestValue, getRequestValue, getRequestValues, getReservedParameter, getReservedValue, getResource, getSanitizedBodyString, getScope, getSessionAttribute, getSumRequestValue, 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`

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

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

    - ### インタフェースから継承されたメソッド javax.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

          public int 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

          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 文の前後のスペースを取り除きます。
        6.2.3.0 (2015/05/01) table属性追加。BODYのSQL文が無くても、table属性で自動生成します。

    - #### afterEnd

          protected int afterEnd()

      #doEndTag() の後続処理を記述します。 これは、サブクラスで、DBTableModel以外の処理を行う場合に、 処理内容を分けるために用意します。
      オーバーライド:
        `afterEnd` クラス内 `ReadTableTag`
      戻り値:
        後続処理の指示
      変更履歴:

        6.2.2.0 (2015/03/27) #afterEnd() メソッド 新規作成。
        6.2.5.0 (2015/06/05) AutoReaderの仕様変更。checkColumns エラー処理が抜けていたので、追加します。

    - #### release2

          protected void 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

          protected void create(File file)

      ファイルオブジェクト より読み込み、データベースに書き込みます。
      オーバーライド:
        `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 のため、件数が１件少なくなっていた。
        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のパースで、上書きするとカラム名が取れないバグ修正。

    - #### setDbid

          public void setDbid(String id)

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

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

    - #### setCommitBatch

          public void setCommitBatch(String cmtBat)

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

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

    - #### setTable

          public void setTable(String tbl)

      【TAG】BODYのSQL文を指定しない場合に使用するテーブルIDを指定します。
      パラメータ:
        `tbl` - テーブルID
      説明:

             通常は、BODYに記述したSQL文を実行しますが、テーブルIDを指定すると、
             INSERT用のSQL文を自動作成します。
             その場合は、BODYのSQL文は設定不要です。
             また、FILE.NAME という文字列を指定した場合は、file1 に指定した
             ファイル名から、拡張子を取り除いた名称をテーブル名として使用します。

      変更履歴:

        6.2.3.0 (2015/05/01) table属性追加

    - #### setUseTimeView

          public void setUseTimeView(String flag)

      【TAG】処理時間を表示する TimeView を表示するかどうか[true:する/false:しない]を指定します (初期値:VIEW_USE_TIMEBAR[=true])。
      パラメータ:
        `flag` - 処理時間を表示 [true:する/false:しない]
      説明:

             true に設定すると、処理時間を表示するバーイメージが表示されます。
             これは、DB検索、APサーバー処理、画面表示の各処理時間をバーイメージで
             表示させる機能です。処理時間の目安になります。
             (初期値:VIEW_USE_TIMEBAR[=true])。

      変更履歴:

        6.3.6.0 (2015/08/16) useTimeView の初期値を、VIEW_USE_TIMEBAR にする。

    - #### toString

          public String toString()

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

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