パッケージ org.opengion.plugin.query

# クラス Query_JDBCTableMerge

java.lang.Object
org.opengion.hayabusa.db.AbstractQuery
org.opengion.plugin.query.Query_JDBCTableMerge

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

public class Query_JDBCTableMerge extends AbstractQuery
引数引き当て(PreparedStatement) を利用した登録系Queryです。 java.sql.PreparedStatement を用いて、データベース登録処理を行います。 引数の指定方法は、DBTableModele のカラム名に対応する名称を、SQL文の[カラム名]形式で 記述します。これを解析して、実際に実行する PreparedStatement に対応する文字列を 作成します。 たとえば、INSERT INTO GEXX (CLM,NAME_JA,LABEL_NAME) VALUES ([CLM],[NAME_JA],[LABEL_NAME] ) と記述すれば、内部で、DBTableModele のカラム名に対応する値を取り出し、SQL文として、 INSERT INTO GEXX (CLM,NAME_JA,LABEL_NAME) VALUES (?,?,? ) を実行します。 Query_JDBCTableUpdate との違いは、INSERT文とUPDATE文を渡しておき、 UPDATEの処理結果が、0件の場合は、INSERTを行います。 そのため、tableUpdateタグのBODY部に直接SQLを書くのではなく、tableUpdateParam ﾀｸﾞを2個書くことになります。 基本的に、tableUpdateタグのqueryTypeにJDBCTableUpdateと記述しておき、tableUpdateParam の sqlType が MERGE の場合は、2種類のSQL文が作成され、自動的に、JDBCTableMerge が呼ばれます。 ※ つまり、通常は、queryType="JDBCTableUpdate" のままで、sqlType="MERGE" を指定すればよい。

変更履歴:
  7.2.9.1 (2020/10/23) 新規作成
機能分類
  データ編集
形式ｻﾝﾌﾟﾙ:
  ●使用例 ・JDBCTableUpdate のまま、sqlType="MERGE" を指定する場合。 【entry.jsp】 <og:tableUpdate command = "{@command}" queryType = "JDBCTableUpdate" <og:tableUpdateParam sqlType = "MERGE" // INSERT or UPDATE table = "{@TABLE_NAME}" // 処理対象のテーブル名 names = "{@names}" // 処理対象のカラム名 omitNames = "{@omitNames}" // 処理対象外のカラム名 where = "{@where}" // 処理対象を特定するキー（INSERT時には使われず、UPDAET時に使われる。） constKeys = "{@constKeys}" // 処理カラム名の中の固定情報カラム名 constVals = "{@constVals}" // 処理カラム名の中の固定情報設定値 /> </og:tableUpdate> ・JDBCTableMerge を直接的に指定する場合。 【entry.jsp】 <og:tableUpdate command = "{@command}" queryType = "JDBCTableMerge" <og:tableUpdateParam sqlType = "INSERT" // INSERT or UPDATE table = "{@TABLE_NAME}" // 処理対象のテーブル名 names = "{@names}" // 処理対象のカラム名 omitNames = "{@omitNames}" // 処理対象外のカラム名 constKeys = "{@constKeys}" // 処理カラム名の中の固定情報カラム名 constVals = "{@constVals}" // 処理カラム名の中の固定情報設定値 /> <og:tableUpdateParam sqlType = "UPDATE" // INSERT or UPDATE table = "{@TABLE_NAME}" // 処理対象のテーブル名 names = "{@names}" // 処理対象のカラム名 omitNames = "{@omitNames}" // 処理対象外のカラム名 where = "{@where}" // 処理対象を特定するキー constKeys = "{@constKeys}" // 処理カラム名の中の固定情報カラム名 constVals = "{@constVals}" // 処理カラム名の中の固定情報設定値 /> </og:tableUpdate>
導入されたバージョン:
  JDK11.0,

- ## フィールドの概要

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

  `ARG_ARRAY, BUFFER_MIDDLE, CR, DB_FETCH_SIZE, DB_MAX_QUERY_TIMEOUT, ERR_MSG, ERR_MSG_ARRAY, SYSARG_ARRAY`

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

  コンストラクタ
  コンストラクタ
  説明
  `Query_JDBCTableMerge()`
  デフォルトコンストラクター

- ## メソッドの概要

  修飾子とタイプ
  メソッド
  説明
  `void`
  `execute(int[] rowNo, DBTableModel table)`
  引数配列付のクエリーを実行します。

  ### クラスから継承されたメソッド org.opengion.hayabusa.db.AbstractQuery

  `createTableModel, execute, execute, execute, getConnection, getDBTableModel, getEditConfig, getErrorCode, getErrorMessage, getExecuteCount, getMaxRowCount, getMergeStatement, getSkipRowCount, getStatement, isUpdate, setConnection, setDBTableModel, setEditConfig, setErrorCode, setErrorMessage, setExecuteCount, setMaxRowCount, setMergeStatement, setResourceManager, setSkipRowCount, setStatement, setUpdateFlag, toString, useParameterMetaData`

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

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

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

  - ### Query_JDBCTableMerge

    public Query_JDBCTableMerge()
    デフォルトコンストラクター
    変更履歴:
      7.2.9.1 (2020/10/23) 新規作成

- ## メソッドの詳細

  - ### execute

    public void execute(int[] rowNo, DBTableModel table)
    引数配列付のクエリーを実行します。 処理自体は、#execute() と同様に、各サブクラスの実装に依存します。 これは、PreparedQuery で使用する引数を配列でセットするものです。 select * from emp where deptno = ? and job = ? などの PreparedQuery の [カラム名] 部分の引数を、DBTableModelから順番にセットしていきます。
    定義:
      `execute` インタフェース内 `Query`
    オーバーライド:
      `execute` クラス内 `AbstractQuery`
    パラメータ:
      `rowNo` - 選択された行番号配列(登録する対象行)
      `table` - DBTableModelオブジェクト(登録する元データ)
    変更履歴:
      7.2.9.1 (2020/10/23) TableUpdateParamTag のマージ(UPDATE,INSERT)対応, 7.3.0.0 (2021/01/06) SpotBugs:チェック例外でストリームやリソースのクリーンアップに失敗するかもしれないメソッド, 7.4.1.0 (2021/04/23) sqlType="MERGE" 時のみ有効で、where 条件で存在すれば何もしない