パッケージ org.opengion.fukurou.xml

# クラス HybsXMLSave

java.lang.Object
org.opengion.fukurou.xml.HybsXMLSave

すべての実装されたインタフェース:
  `TagElementListener`

public class HybsXMLSave extends Object implements TagElementListener
このｸﾗｽは、ｵﾗｸﾙ XDKの oracle.xml.sql.dml.OracleXMLSave ｸﾗｽと ほぼ同様の目的で使用できるｸﾗｽです。 拡張XDK形式のXMLﾌｧｲﾙを読み込み、ﾃﾞｰﾀﾍﾞｰｽに INSERT します。 拡張XDK形式の元となる ｵﾗｸﾙ XDK(Oracle XML Developer's Kit)については、以下の ﾘﾝｸを参照願います。 XDK(Oracle XML Developer's Kit) このｸﾗｽでは、MAP を登録する[ setDefaultMap( Map ) ]ことにより、 XMLﾌｧｲﾙに存在しないｶﾗﾑを初期値として設定することが可能になります。 例えば、登録日や、登録者、または、ﾃﾝﾌﾟﾚｰﾄより各ｼｽﾃﾑID毎に 登録するなどです。 同様に、読み取った XMLﾌｧｲﾙの情報を書き換える機能[ setAfterMap( Map ) ]ﾒｿｯﾄﾞ により、ｶﾗﾑの値の置き換えも可能です。 拡張XDK形式の元となる ｵﾗｸﾙ XDK(Oracle XML Developer's Kit)については、以下の ﾘﾝｸを参照願います。 XDK(Oracle XML Developer's Kit) 拡張XDK形式とは、ROW 以外に、SQL処理用ﾀｸﾞ(EXEC_SQL)を持つ XML ﾌｧｲﾙです。 また、登録するﾃｰﾌﾞﾙ(table)を ROWSETﾀｸﾞの属性情報として付与することができます。 (大文字小文字に注意) これは、ｵﾗｸﾙXDKで処理する場合、無視されますので、同様に扱うことが出来ます。 この、EXEC_SQL は、それそれの XMLﾃﾞｰﾀをﾃﾞｰﾀﾍﾞｰｽに登録する際に、 SQL処理を自動的に流す為の、SQL文を記載します。 この処理は、ｲﾍﾞﾝﾄ毎に実行される為、その配置順は重要です。 このﾀｸﾞは、複数記述することも出来ますが、BODY部には、１つのSQL文のみ記述します。 <ROWSET tableName="XX" > <EXEC_SQL> 最初に記載して、初期処理(ﾃﾞｰﾀｸﾘｱ等)を実行させる。 delete from GEXX where YYYYY </EXEC_SQL> <MERGE_SQL> このSQL文で UPDATEして、結果が０件ならINSERTを行います。 update GEXX set AA=[AA] , BB=[BB] where CC=[CC] </MERGE_SQL> <ROW num="1"> <ｶﾗﾑ1>値1</ｶﾗﾑ1> ･･･ <ｶﾗﾑn>値n</ｶﾗﾑn> </ROW> ･･･ <ROW num="n"> ･･･ </ROW> <EXEC_SQL> 最後に記載して、項目の設定(整合性登録)を行う。 update GEXX set AA='XX' , BB='XX' where YYYYY </EXEC_SQL> <ROWSET>

変更履歴:
  7.0.1.3 (2018/11/12) EXEC_SQLで、";" で複数のSQL文に分割、実行します。
導入されたバージョン:
  JDK9.0,

- ## コンストラクタの概要

  コンストラクタ
  コンストラクタ
  説明
  `HybsXMLSave(Connection conn)`
  ｺﾈｸｼｮﾝを指定して、ｵﾌﾞｼﾞｪｸﾄを構築します。
  `HybsXMLSave(Connection conn, String table)`
  ｺﾈｸｼｮﾝとﾃｰﾌﾞﾙ名を指定して、ｵﾌﾞｼﾞｪｸﾄを構築します。

- ## メソッドの概要

  修飾子とタイプ
  メソッド
  説明
  `void`
  `actionExecSQL(TagElement tag)`
  <EXEC_SQL> ﾀｸﾞの endElement 処理毎に呼び出されます。
  `void`
  `actionInit(TagElement tag)`
  <ROWSET> ﾀｸﾞの一番最初に呼び出されます。
  `void`
  `actionMergeSQL(TagElement tag)`
  <MERGE_SQL> ﾀｸﾞの endElement 処理時に呼び出されます。
  `void`
  `actionRow(TagElement tag)`
  <ROW> ﾀｸﾞの endElement 処理毎に呼び出されます。
  `int`
  `getDDLCount()`
  ﾃﾞｰﾀﾍﾞｰｽにDDL（ﾃﾞｰﾀ定義言語：Data Definition Language）処理した件数を返します。
  `int`
  `getDeleteCount()`
  ﾃﾞｰﾀﾍﾞｰｽに変更(更新、削除を含む)した件数を返します。
  `String`
  `getErrorMessage()`
  isExecErr でfalseを指定した場合に、ｴﾗｰ内容の文字列を取り出します。
  `int`
  `getInsertCount()`
  ﾃﾞｰﾀﾍﾞｰｽに追加した件数を返します。
  `String`
  `getTableName()`
  実際に登録された ﾃｰﾌﾞﾙ名を返します。
  `int`
  `getUpdateCount()`
  ﾃﾞｰﾀﾍﾞｰｽを更新した件数を返します。
  `void`
  `insertXML(Reader reader)`
  ﾃﾞｰﾀﾍﾞｰｽに追加処理(INSERT)を行います。
  `static void`
  `main(String[] args)`
  ﾃｽﾄ用のﾒｲﾝﾒｿｯﾄﾞ Usage: java org.opengion.fukurou.xml.HybsXMLSave USER PASSWD URL TABLE FILE [ENCODE] [DRIVER] USER : DB接続ﾕｰｻﾞｰ(GE) PASSWD : DB接続ﾊﾟｽﾜｰﾄﾞ(GE) URL : DB接続JDBCﾄﾞﾗｲﾊﾞURL(jdbc:oracle:thin:@localhost:1521:HYBS TABLE : 登録するﾃｰﾌﾞﾙID(GE21) FILE : 登録するORACLE XDK 形式 XMLﾌｧｲﾙ(GE21.xml) [ENCODE]: ﾌｧｲﾙのｴﾝｺｰﾄﾞ 初期値:UTF-8 [DRIVER]: JDBCﾄﾞﾗｲﾊﾞｰ 初期値:oracle.jdbc.OracleDriver ※ ﾌｧｲﾙが存在しなかった場合、FileNotFoundException を RuntimeException に変換して、throw します。
  `void`
  `onExecErrException(boolean flag)`
  EXEC_SQL のｴﾗｰ時に Exception を発行するかどうかを指定できます(初期値:true)。
  `void`
  `setAfterMap(Map<String,String> map)`
  XMLﾌｧｲﾙを読み取った後で指定するｶﾗﾑと値のﾍﾟｱ(ﾏｯﾌﾟ)情報をｾｯﾄします。
  `void`
  `setDefaultMap(Map<String,String> map)`
  XMLﾌｧｲﾙを読み取る前に指定するｶﾗﾑと値のﾍﾟｱ(ﾏｯﾌﾟ)情報をｾｯﾄします。

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

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

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

  - ### HybsXMLSave

    public HybsXMLSave(Connection conn)
    ｺﾈｸｼｮﾝを指定して、ｵﾌﾞｼﾞｪｸﾄを構築します。 ﾃｰﾌﾞﾙ名は、拡張XDK形式のROWSETﾀｸﾞのtableName属性に 記述しておく必要があります。
    パラメータ:
      `conn` - ﾃﾞｰﾀﾍﾞｰｽ接続

  - ### HybsXMLSave

    public HybsXMLSave(Connection conn, String table)
    ｺﾈｸｼｮﾝとﾃｰﾌﾞﾙ名を指定して、ｵﾌﾞｼﾞｪｸﾄを構築します。 ここで指定するﾃｰﾌﾞﾙ名は、ﾃﾞﾌｫﾙﾄﾃｰﾌﾞﾙという扱いです。 拡張XDK形式のROWSETﾀｸﾞのtableName属性にﾃｰﾌﾞﾙ名が記述されている場合は、 そちらが優先されます。
    パラメータ:
      `conn` - ﾃﾞｰﾀﾍﾞｰｽ接続
      `table` - ﾃｰﾌﾞﾙ名(ROWSETﾀｸﾞのtable属性が未設定時に使用)
    変更履歴:
      4.0.0.0 (2007/09/25) ParameterMetaData を使用したﾊﾟﾗﾒｰﾀ設定追加。, 5.3.8.0 (2011/08/01) useParamMetaData を このｸﾗｽで直接取得する。(PostgreSQL対応)

- ## メソッドの詳細

  - ### onExecErrException

    public void onExecErrException(boolean flag)
    EXEC_SQL のｴﾗｰ時に Exception を発行するかどうかを指定できます(初期値:true)。 true を指定すると、ｴﾗｰ時には、 RuntimeException を throw します。 false にすると、標準ｴﾗｰ出力にのみ、出力します。 このﾌﾗｸﾞは、EXEC_SQL のみ有効です。それ以外のﾀﾌﾞの処理では、ｴﾗｰが発生すると その時点で、Exception を発行して、処理を終了します。 初期値は、true(Exception を発行する) です。
    パラメータ:
      `flag` - true:Exception を発行する/false:標準ｴﾗｰ出力に出力する
    変更履歴:
      5.6.9.2 (2013/10/18) 新規追加

  - ### actionInit

    public void actionInit(TagElement tag)
    <ROWSET> ﾀｸﾞの一番最初に呼び出されます。 ROWSET の属性である、table 属性と、dbid 属性 を、TagElement の get ﾒｿｯﾄﾞで取得できます。 取得時のｷｰは、それぞれ、"TABLE" と "DBID" です。
    定義:
      `actionInit` インタフェース内 `TagElementListener`
    パラメータ:
      `tag` - ﾀｸﾞｴﾚﾒﾝﾄ
    関連項目:
      - `TagElement`
      - `HybsXMLHandler.setTagElementListener(TagElementListener)`
    変更履歴:
      8.1.0.3 (2022/01/21) "tableName" を、HybsXMLHandler.ROWSET_TABLE に変更。

  - ### actionRow

    public void actionRow(TagElement tag)
    <ROW> ﾀｸﾞの endElement 処理毎に呼び出されます。 この Listener をｾｯﾄすることにより、行ﾃﾞｰﾀを取得都度、 TagElement ｵﾌﾞｼﾞｪｸﾄを作成し、このﾒｿｯﾄﾞが呼び出されます。
    定義:
      `actionRow` インタフェース内 `TagElementListener`
    パラメータ:
      `tag` - ﾀｸﾞｴﾚﾒﾝﾄ
    関連項目:
      - `TagElement`
      - `HybsXMLHandler.setTagElementListener(TagElementListener)`
    変更履歴:
      4.0.0.0 (2007/05/09) ParameterMetaData を使用したﾊﾟﾗﾒｰﾀ設定追加。, 4.0.0.0 (2007/09/25) isOracle から useParamMetaData に変更, 4.3.7.0 (2009/06/01) HSQLDB対応, 5.3.8.0 (2011/08/01) useParamMetaData setNull 対応(PostgreSQL対応), 5.6.6.1 (2013/07/12) lastSQL 対応。ﾃﾞﾊﾞｯｸﾞ用に、最後に使用したSQL文を残します。

  - ### actionExecSQL

    public void actionExecSQL(TagElement tag)
    <EXEC_SQL> ﾀｸﾞの endElement 処理毎に呼び出されます。 getBody ﾒｿｯﾄﾞを使用して、このﾀｸﾞのBODY部の文字列を取得します。 この Listener をｾｯﾄすることにより、EXEC_SQL ﾃﾞｰﾀを取得都度、 TagElement ｵﾌﾞｼﾞｪｸﾄを作成し、このﾒｿｯﾄﾞが呼び出されます。 EXEC_SQL ﾀｸﾞでは、delete文やupdate文など、特殊な前処理や後処理用の SQLと DDL（ﾃﾞｰﾀ定義言語：Data Definition Language）の処理なども記述できます。 ここでは簡易的に、何か実行された場合は、delete 処理と考え、削除ｶｳﾝﾄを加算し、 0件で帰ってきた場合に、DDLが実行されたと考え、DDLｶｳﾝﾄを＋１します。 ただし、0件 delete も考えられるため、SQL文の先頭文字によるﾁｪｯｸは入れておきます。
    定義:
      `actionExecSQL` インタフェース内 `TagElementListener`
    パラメータ:
      `tag` - ﾀｸﾞｴﾚﾒﾝﾄ
    関連項目:
      - `TagElement`
      - `HybsXMLHandler.setTagElementListener(TagElementListener)`
    変更履歴:
      5.6.6.1 (2013/07/12) lastSQL 対応。ﾃﾞﾊﾞｯｸﾞ用に、最後に使用したSQL文を残します。, 5.6.7.0 (2013/07/27) DDL（ﾃﾞｰﾀ定義言語：Data Definition Language）の処理件数追加, 5.6.9.2 (2013/10/18) EXEC_SQL のｴﾗｰ時に Exception を発行するかどうかを指定, 6.4.2.1 (2016/02/05) try-with-resources 文で記述。, 7.0.1.3 (2018/11/12) EXEC_SQLで、";" で複数のSQL文に分割、実行します。, 8.1.0.3 (2022/01/21) EXEC_SQLに、exists属性追加。

  - ### actionMergeSQL

    public void actionMergeSQL(TagElement tag)
    <MERGE_SQL> ﾀｸﾞの endElement 処理時に呼び出されます。 getBody ﾒｿｯﾄﾞを使用して、このﾀｸﾞのBODY部の文字列を取得します。 MERGE_SQLﾀｸﾞは、ﾏｰｼﾞ処理したいﾃﾞｰﾀ部よりも上位に記述しておく 必要がありますが、中間部に複数回記述しても構いません。 このﾀｸﾞが現れるまでは、INSERT のみ実行されます。このﾀｸﾞ以降は、 一旦 UPDATE し、結果が ０件の場合は、INSERTする流れになります。 完全に INSERT のみであるﾃﾞｰﾀを前半に、UPDATE/INSERTを行う ﾃﾞｰﾀを後半に、その間に、MERGE_SQL ﾀｸﾞを入れることで、無意味な UPDATE を避けることが可能です。 この Listener をｾｯﾄすることにより、MERGE_SQL ﾃﾞｰﾀを取得都度、 TagElement ｵﾌﾞｼﾞｪｸﾄを作成し、このﾒｿｯﾄﾞが呼び出されます。
    定義:
      `actionMergeSQL` インタフェース内 `TagElementListener`
    パラメータ:
      `tag` - ﾀｸﾞｴﾚﾒﾝﾄ
    関連項目:
      - `TagElement`
      - `HybsXMLHandler.setTagElementListener(TagElementListener)`
    変更履歴:
      4.0.0.0 (2007/05/09) ParameterMetaData を使用したﾊﾟﾗﾒｰﾀ設定追加。, 4.0.0.0 (2007/09/25) isOracle から useParamMetaData に変更, 5.6.6.1 (2013/07/12) lastSQL 対応。ﾃﾞﾊﾞｯｸﾞ用に、最後に使用したSQL文を残します。

  - ### setDefaultMap

    public void setDefaultMap(Map<String,String> map)
    XMLﾌｧｲﾙを読み取る前に指定するｶﾗﾑと値のﾍﾟｱ(ﾏｯﾌﾟ)情報をｾｯﾄします。 このｶﾗﾑと値のﾍﾟｱのﾏｯﾌﾟは、ｵﾌﾞｼﾞｪｸﾄ構築前に設定される為、 XMLﾌｧｲﾙにｷｰが存在している場合は、値が書き変わります。(XML優先) XMLﾌｧｲﾙにｷｰが存在していない場合は、ここで指定するMapの値が 初期設定値として使用されます。 ここで指定する Map に LinkedHashMap を使用する場合、ｶﾗﾑ順も 指定することが出来ます。
    パラメータ:
      `map` - 初期設定するｶﾗﾑﾃﾞｰﾀﾏｯﾌﾟ
    関連項目:
      - `setAfterMap(Map)`

  - ### setAfterMap

    public void setAfterMap(Map<String,String> map)
    XMLﾌｧｲﾙを読み取った後で指定するｶﾗﾑと値のﾍﾟｱ(ﾏｯﾌﾟ)情報をｾｯﾄします。 このｶﾗﾑと値のﾍﾟｱのﾏｯﾌﾟは、ｵﾌﾞｼﾞｪｸﾄ構築後に設定される為、 XMLﾌｧｲﾙのｷｰの存在に関係なく、Mapのｷｰと値が使用されます。(Map優先) null を設定した場合は、なにも処理されません。
    パラメータ:
      `map` - 後設定するｶﾗﾑﾃﾞｰﾀﾏｯﾌﾟ
    関連項目:
      - `setDefaultMap(Map)`

  - ### insertXML

    public void insertXML(Reader reader)
    ﾃﾞｰﾀﾍﾞｰｽに追加処理(INSERT)を行います。 先に指定されたｺﾈｸｼｮﾝを用いて、指定のﾃｰﾌﾞﾙに INSERT します。 引数には、XMLﾌｧｲﾙを指定したﾘｰﾀﾞｰをｾｯﾄします。 ｺﾈｸｼｮﾝは、終了後、ｺﾐｯﾄされます。(close されません。) ﾘｰﾀﾞｰのｸﾛｰｽﾞは、ここでは行っていません。
    パラメータ:
      `reader` - XMLﾌｧｲﾙを指定するﾘｰﾀﾞｰ
    変更履歴:
      5.1.1.0 (2009/11/11) insMeta , updMeta のｸﾘｱ(気休め)

  - ### getInsertCount

    public int getInsertCount()
    ﾃﾞｰﾀﾍﾞｰｽに追加した件数を返します。
    戻り値:
      登録件数

  - ### getUpdateCount

    public int getUpdateCount()
    ﾃﾞｰﾀﾍﾞｰｽを更新した件数を返します。 これは、拡張XDK形式で、MERGE_SQL ﾀｸﾞを使用した場合の更新処理件数を 合計した値を返します。
    戻り値:
      更新件数

  - ### getDeleteCount

    public int getDeleteCount()
    ﾃﾞｰﾀﾍﾞｰｽに変更(更新、削除を含む)した件数を返します。 これは、拡張XDK形式で、EXEC_SQL ﾀｸﾞを使用した場合の実行件数を合計した 値を返します。 よって、更新か、追加か、削除かは、判りませんが、通常 登録前に削除する ｹｰｽで使われることから、deleteCount としています。
    戻り値:
      変更件数(主に、削除件数)

  - ### getDDLCount

    public int getDDLCount()
    ﾃﾞｰﾀﾍﾞｰｽにDDL（ﾃﾞｰﾀ定義言語：Data Definition Language）処理した件数を返します。 これは、拡張XDK形式で、EXEC_SQL ﾀｸﾞを使用した場合の実行件数を合計した 値を返します。 EXEC_SQL では、登録前に削除する delete 処理も、EXEC_SQL ﾀｸﾞを使用して実行しますが その処理と分けてｶｳﾝﾄします。
    戻り値:
      DDL（ﾃﾞｰﾀ定義言語：Data Definition Language）処理した件数
    変更履歴:
      5.6.7.0 (2013/07/27) DDL（ﾃﾞｰﾀ定義言語：Data Definition Language）の処理件数追加

  - ### getTableName

    public String getTableName()
    実際に登録された ﾃｰﾌﾞﾙ名を返します。 ﾃｰﾌﾞﾙ名は、拡張XDK形式のROWSETﾀｸﾞのtableName属性に 記述しておくか、ｺﾝｽﾄﾗｸﾀｰで引数として渡します。 両方指定された場合は、ROWSETﾀｸﾞのtableName属性が優先されます。 ここでの返り値は、実際に使用された ﾃｰﾌﾞﾙ名です。
    戻り値:
      ﾃｰﾌﾞﾙ名

  - ### getErrorMessage

    public String getErrorMessage()
    isExecErr でfalseを指定した場合に、ｴﾗｰ内容の文字列を取り出します。 ｴﾗｰが発生しなかった場合は、ｾﾞﾛ文字列が返ります。
    戻り値:
      ｴﾗｰ内容の文字列
    変更履歴:
      7.3.2.0 (2021/03/19) isExecErr でfalseを指定した場合に、ｴﾗｰ内容の文字列を取り出します。

  - ### main

    public static void main(String[] args) throws ClassNotFoundException, SQLException
    ﾃｽﾄ用のﾒｲﾝﾒｿｯﾄﾞ Usage: java org.opengion.fukurou.xml.HybsXMLSave USER PASSWD URL TABLE FILE [ENCODE] [DRIVER] USER : DB接続ﾕｰｻﾞｰ(GE) PASSWD : DB接続ﾊﾟｽﾜｰﾄﾞ(GE) URL : DB接続JDBCﾄﾞﾗｲﾊﾞURL(jdbc:oracle:thin:@localhost:1521:HYBS TABLE : 登録するﾃｰﾌﾞﾙID(GE21) FILE : 登録するORACLE XDK 形式 XMLﾌｧｲﾙ(GE21.xml) [ENCODE]: ﾌｧｲﾙのｴﾝｺｰﾄﾞ 初期値:UTF-8 [DRIVER]: JDBCﾄﾞﾗｲﾊﾞｰ 初期値:oracle.jdbc.OracleDriver ※ ﾌｧｲﾙが存在しなかった場合、FileNotFoundException を RuntimeException に変換して、throw します。 ※ 指定のｴﾝｺｰﾄﾞが存在しなかった場合、UnsupportedEncodingException を RuntimeException に変換して、throw します。
    パラメータ:
      `args` - ｺﾏﾝﾄﾞ引数配列
    例外:
      `ClassNotFoundException` - ｸﾗｽを見つけることができなかった場合。
      `SQLException` - ﾃﾞｰﾀﾍﾞｰｽ接続ｴﾗｰが発生した場合。
    変更履歴:
      5.1.1.0 (2009/12/01) MySQL対応 明示的に、TRANSACTION_READ_COMMITTED を指定する。, 5.6.7.0 (2013/07/27) DDL（ﾃﾞｰﾀ定義言語：Data Definition Language）の処理件数追加, 6.4.2.1 (2016/02/05) try-with-resources 文で記述。