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

# クラス DBUpdater

java.lang.Object
org.opengion.fukurou.db.DBUpdater

public final class DBUpdater extends Object
PreparedStatementを利用した更新処理を行う、簡易的なクラスです。 ParameterMetaDataの使用有無を指定することで、ﾊﾟﾗﾒｰﾀを処理する際に、 sqlType を使用するかどうかを指定します。 また、データ登録時のバッチサイズに基づいた処理を行っています。 execute(String[]) で、行ごとのパラメータデータを渡します。 一番最後に、execEnd() を呼ぶことで、更新件数を返します。 更新件数を取得しない場合でも、このメソッドを呼んでください。 このクラスは、マルチスレッドに対応していません。

導入されたバージョン:
  JDK9.0,

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

  コンストラクタ
  コンストラクタ
  説明
  `DBUpdater(int prmSize, PreparedStatement pstmt)`
  PreparedStatement を指定して、インスタンスを作成します。
  `DBUpdater(int prmSize, PreparedStatement pstmt, boolean usePMeta)`
  PreparedStatement を指定して、インスタンスを作成します。
  `DBUpdater(int prmSize, PreparedStatement pstmt, boolean usePMeta, boolean[] isTime)`
  PreparedStatementと、sqlTypeの使用有無を指定して、インスタンスを作成します。
  `DBUpdater(int prmSize, PreparedStatement pstmt, boolean usePMeta, boolean[] isTime, boolean useSelect)`
  PreparedStatementと、sqlTypeの使用有無を指定して、インスタンスを作成します。

- ## メソッドの概要

  修飾子とタイプ
  メソッド
  説明
  `int`
  `execEnd()`
  データの最後の処理を行います。
  `void`
  `execute(String[] values)`
  データ配列を渡してPreparedStatementの引数に、値をセットします。
  `int`
  `update(String[] values)`
  データ配列を渡してPreparedStatementの引数に、値をセットします。

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

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

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

  - ### DBUpdater

    public DBUpdater(int prmSize, PreparedStatement pstmt)
    PreparedStatement を指定して、インスタンスを作成します。 内部で、ParameterMetaData を作成して、sqlType を使用します。
    パラメータ:
      `prmSize` - パラメータの個数
      `pstmt` - PreparedStatementオブジェクト

  - ### DBUpdater

    public DBUpdater(int prmSize, PreparedStatement pstmt, boolean usePMeta)
    PreparedStatement を指定して、インスタンスを作成します。 内部で、ParameterMetaData を作成して、sqlType を使用します。
    パラメータ:
      `prmSize` - パラメータの個数
      `pstmt` - PreparedStatementオブジェクト
      `usePMeta` - sqlType を使用するかどうか [true:使用する/false:使用しない]

  - ### DBUpdater

    public DBUpdater(int prmSize, PreparedStatement pstmt, boolean usePMeta, boolean[] isTime)
    PreparedStatementと、sqlTypeの使用有無を指定して、インスタンスを作成します。 usePMetaは、内部で、ParameterMetaData を作成して、sqlType を使用するかどうかを 指定します。ORACLEのようなタイプの
    パラメータ:
      `prmSize` - パラメータの個数
      `pstmt` - PreparedStatementオブジェクト
      `usePMeta` - sqlType を使用するかどうか [true:使用する/false:使用しない]
      `isTime` - sqlType を使用するかどうか [true:使用する/false:使用しない]
    変更履歴:
      7.4.1.0 (2021/04/23) sqlType="MERGE" 時のみ有効で、where 条件で存在すれば何もしない

  - ### DBUpdater

    public DBUpdater(int prmSize, PreparedStatement pstmt, boolean usePMeta, boolean[] isTime, boolean useSelect)
    PreparedStatementと、sqlTypeの使用有無を指定して、インスタンスを作成します。 usePMetaは、内部で、ParameterMetaData を作成して、sqlType を使用するかどうかを 指定します。ORACLEのようなタイプの
    パラメータ:
      `prmSize` - パラメータの個数
      `pstmt` - PreparedStatementオブジェクト
      `usePMeta` - sqlType を使用するかどうか [true:使用する/false:使用しない]
      `isTime` - sqlType を使用するかどうか [true:使用する/false:使用しない]
      `useSelect` - true の場合は、UPDATE/INSERTではなく、SELECT します。
    変更履歴:
      7.2.9.1 (2020/10/23) isTimeのメソッドを統合します。, 7.4.1.0 (2021/04/23) sqlType="MERGE" 時のみ有効で、where 条件で存在すれば何もしない

- ## メソッドの詳細

  - ### execute

    public void execute(String[] values) throws SQLException
    データ配列を渡してPreparedStatementの引数に、値をセットします。 オラクル系の場合は、そのまま、setObject を行えば、自動変換しますが、 それ以外のDBでは、java.sql.Types を渡す必要があります。さらに、null 値も、setNullを使用します。 今は、pMeta が、null かどうかで、オラクル系か、どうかを判定するようにしています。 ※ このメソッドでは、useSelect は使いません。
    パラメータ:
      `values` - ？に割り当てる設定値
    例外:
      `SQLException` - DB処理の実行に失敗した場合
    変更履歴:
      7.2.9.1 (2020/10/23) isTimeのメソッドを統合します。, 7.4.1.0 (2021/04/23) sqlType="MERGE" 時のみ有効で、where 条件で存在すれば何もしない

  - ### update

    public int update(String[] values) throws SQLException
    データ配列を渡してPreparedStatementの引数に、値をセットします。 useSelect=true の場合は、更新系ではなく検索系の処理を行います。 ここでは、マージ処理を考慮しているため、検索結果が、0件か、それ以上かのみ判定します。
    パラメータ:
      `values` - ？に割り当てる設定値
    戻り値:
      更新件数
    例外:
      `SQLException` - DB処理の実行に失敗した場合
    変更履歴:
      7.2.9.1 (2020/10/23) TableUpdateParamTag のマージ(UPDATE,INSERT)対応, 7.4.1.0 (2021/04/23) sqlType="MERGE" 時のみ有効で、where 条件で存在すれば何もしない

  - ### execEnd

    public int execEnd() throws SQLException
    データの最後の処理を行います。 具体的には、executeBatch() で、所定のバッチ数に届いていない場合の処理です。
    戻り値:
      更新件数
    例外:
      `SQLException` - ﾃﾞｰﾀﾍﾞｰｽ処理で例外が発生した場合。