パッケージ org.opengion.fukurou.xml
クラス HybsXMLSave
java.lang.Object
org.opengion.fukurou.xml.HybsXMLSave
- すべての実装されたインタフェース:
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部には、1つのSQL文のみ記述します。
<ROWSET tableName="XX" >
<EXEC_SQL> 最初に記載して、初期処理(データクリア等)を実行させる。
delete from GEXX where YYYYY
</EXEC_SQL>
<MERGE_SQL> このSQL文で UPDATEして、結果が0件なら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
データベースにDDL(データ定義言語:Data Definition Language)処理した件数を返します。int
データベースに変更(更新、削除を含む)した件数を返します。isExecErr でfalseを指定した場合に、エラー内容の文字列を取り出します。int
データベースに追加した件数を返します。実際に登録された テーブル名を返します。int
データベースを更新した件数を返します。void
データベースに追加処理(INSERT)を行います。static void
テスト用のメインメソッド 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ファイルを読み取る前に指定するカラムと値のペア(マップ)情報をセットします。
-
コンストラクタの詳細
-
HybsXMLSave
コネクションを指定して、オブジェクトを構築します。 テーブル名は、拡張XDK形式のROWSETタグのtableName属性に 記述しておく必要があります。- パラメータ:
conn
- データベース接続
-
HybsXMLSave
コネクションとテーブル名を指定して、オブジェクトを構築します。 ここで指定するテーブル名は、デフォルトテーブルという扱いです。 拡張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
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
<ROWSET> タグの一番最初に呼び出されます。 ROWSET の属性である、table 属性と、dbid 属性 を、TagElement の get メソッドで取得できます。 取得時のキーは、それぞれ、"TABLE" と "DBID" です。- 定義:
actionInit
インタフェース内TagElementListener
- パラメータ:
tag
- タグエレメント- 関連項目:
- 変更履歴:
- 8.1.0.3 (2022/01/21) "tableName" を、HybsXMLHandler.ROWSET_TABLE に変更。
-
actionRow
<ROW> タグの endElement 処理毎に呼び出されます。 この Listener をセットすることにより、行データを取得都度、 TagElement オブジェクトを作成し、このメソッドが呼び出されます。- 定義:
actionRow
インタフェース内TagElementListener
- パラメータ:
tag
- タグエレメント- 関連項目:
- 変更履歴:
- 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文を残します。, 8.5.4.2 (2024/01/12) PMD 7.0.0 ExceptionAsFlowControl 対応
-
actionExecSQL
<EXEC_SQL> タグの endElement 処理毎に呼び出されます。 getBody メソッドを使用して、このタグのBODY部の文字列を取得します。 この Listener をセットすることにより、EXEC_SQL データを取得都度、 TagElement オブジェクトを作成し、このメソッドが呼び出されます。 EXEC_SQL タグでは、delete文やupdate文など、特殊な前処理や後処理用の SQLと DDL(データ定義言語:Data Definition Language)の処理なども記述できます。 ここでは簡易的に、何か実行された場合は、delete 処理と考え、削除カウントを加算し、 0件で帰ってきた場合に、DDLが実行されたと考え、DDLカウントを+1します。 ただし、0件 delete も考えられるため、SQL文の先頭文字によるチェックは入れておきます。- 定義:
actionExecSQL
インタフェース内TagElementListener
- パラメータ:
tag
- タグエレメント- 関連項目:
- 変更履歴:
- 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
<MERGE_SQL> タグの endElement 処理時に呼び出されます。 getBody メソッドを使用して、このタグのBODY部の文字列を取得します。 MERGE_SQLタグは、マージ処理したいデータ部よりも上位に記述しておく 必要がありますが、中間部に複数回記述しても構いません。 このタグが現れるまでは、INSERT のみ実行されます。このタグ以降は、 一旦 UPDATE し、結果が 0件の場合は、INSERTする流れになります。 完全に INSERT のみであるデータを前半に、UPDATE/INSERTを行う データを後半に、その間に、MERGE_SQL タグを入れることで、無意味な UPDATE を避けることが可能です。 この Listener をセットすることにより、MERGE_SQL データを取得都度、 TagElement オブジェクトを作成し、このメソッドが呼び出されます。- 定義:
actionMergeSQL
インタフェース内TagElementListener
- パラメータ:
tag
- タグエレメント- 関連項目:
- 変更履歴:
- 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
XMLファイルを読み取る前に指定するカラムと値のペア(マップ)情報をセットします。 このカラムと値のペアのマップは、オブジェクト構築前に設定される為、 XMLファイルにキーが存在している場合は、値が書き変わります。(XML優先) XMLファイルにキーが存在していない場合は、ここで指定するMapの値が 初期設定値として使用されます。 ここで指定する Map に LinkedHashMap を使用する場合、カラム順も 指定することが出来ます。- パラメータ:
map
- 初期設定するカラムデータマップ- 関連項目:
-
setAfterMap
XMLファイルを読み取った後で指定するカラムと値のペア(マップ)情報をセットします。 このカラムと値のペアのマップは、オブジェクト構築後に設定される為、 XMLファイルのキーの存在に関係なく、Mapのキーと値が使用されます。(Map優先) null を設定した場合は、なにも処理されません。- パラメータ:
map
- 後設定するカラムデータマップ- 関連項目:
-
insertXML
データベースに追加処理(INSERT)を行います。 先に指定されたコネクションを用いて、指定のテーブルに INSERT します。 引数には、XMLファイルを指定したリーダーをセットします。 コネクションは、終了後、コミットされます。(close されません。) リーダーのクローズは、ここでは行っていません。- パラメータ:
reader
- XMLファイルを指定するリーダー- 変更履歴:
- 5.1.1.0 (2009/11/11) insMeta , updMeta のクリア(気休め)
-
getInsertCount
データベースに追加した件数を返します。- 戻り値:
- 登録件数
-
getUpdateCount
データベースを更新した件数を返します。 これは、拡張XDK形式で、MERGE_SQL タグを使用した場合の更新処理件数を 合計した値を返します。- 戻り値:
- 更新件数
-
getDeleteCount
データベースに変更(更新、削除を含む)した件数を返します。 これは、拡張XDK形式で、EXEC_SQL タグを使用した場合の実行件数を合計した 値を返します。 よって、更新か、追加か、削除かは、判りませんが、通常 登録前に削除する ケースで使われることから、deleteCount としています。- 戻り値:
- 変更件数(主に、削除件数)
-
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
実際に登録された テーブル名を返します。 テーブル名は、拡張XDK形式のROWSETタグのtableName属性に 記述しておくか、コンストラクターで引数として渡します。 両方指定された場合は、ROWSETタグのtableName属性が優先されます。 ここでの返り値は、実際に使用された テーブル名です。- 戻り値:
- テーブル名
-
getErrorMessage
isExecErr でfalseを指定した場合に、エラー内容の文字列を取り出します。 エラーが発生しなかった場合は、ゼロ文字列が返ります。- 戻り値:
- エラー内容の文字列
- 変更履歴:
- 7.3.2.0 (2021/03/19) isExecErr でfalseを指定した場合に、エラー内容の文字列を取り出します。
-
main
テスト用のメインメソッド 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 文で記述。
-