001/* 002 * Copyright (c) 2009 The openGion Project. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, 013 * either express or implied. See the License for the specific language 014 * governing permissions and limitations under the License. 015 */ 016package org.opengion.hayabusa.db; 017 018import java.sql.Connection; // 6.3.6.1 (2015/08/28) 019 020import org.opengion.hayabusa.resource.ResourceManager; 021import org.opengion.fukurou.util.ErrorMessage; 022 023/** 024 * ステートメント文を execute() する事により、データベースを検索した結果を DBTableModel に 025 * 割り当てるインターフェースです。 026 * 実際にこのインターフェースを継承したクラスでは、データベース以外に 027 * フラットファイルやXMLデータなどを読み込んで DBTableModel を作成させる 028 * 様な実装クラスを作成することができます。 029 * 030 * @og.group データ表示 031 * @og.group データ編集 032 * 033 * @version 4.0 034 * @author Kazuhiko Hasegawa 035 * @since JDK5.0, 036 */ 037public interface Query { 038 /** 039 * Connectionオブジェクトを外部から設定します。 040 * 041 * 通常は、Transaction と 接続先(DBID) を使用して作成した Connection を渡します。 042 * このクラスでは、Connection の close() や、ConnectionFactory への返却なども 043 * 行いません。それらは、外部処理(通常は、Transactionオブジェクト)で行います。 044 * 045 * Connection には、null は登録できません。 046 * 047 * @og.rev 6.3.6.1 (2015/08/28) 新規追加 048 * 049 * @param conn Connectionオブジェクト 050 */ 051 void setConnection( final Connection conn ) ; 052 053 /** 054 * ステートメント文字列をセットします。 055 * 056 * @param statement ステートメント文字列 057 * 058 */ 059 void setStatement( String statement ) ; 060 061 /** 062 * ステートメント文字列を取り出します。 063 * 064 * @return ステートメント文字列 065 * 066 */ 067 String getStatement(); 068 069 /** 070 * ステートメント文字列(UPDATE,INSERT)をセットします。 071 * 072 * @og.rev 7.2.9.1 (2020/10/23) TableUpdateParamTag のマージ(UPDATE,INSERT)対応 073 * @og.rev 7.4.1.0 (2021/04/23) sqlType="MERGE" 時のみ有効で、where 条件で存在すれば何もしない 074 * 075 * @param update UPDATEステートメント文字列 076 * @param insert INSERTステートメント文字列 077 * @param select SELECTステートメント文字列(あれば何もしない、なければINSERT処理の判定用) 078 */ 079// void setMergeStatement( String update, String insert ) ; 080 void setMergeStatement( String update, String insert , final String select ); 081 082 /** 083 * ステートメント文字列(UPDATE,INSERT,SELECT)を取り出します。 084 * 085 * @og.rev 7.2.9.1 (2020/10/23) TableUpdateParamTag のマージ(UPDATE,INSERT)対応 086 * 087 * @return ステートメント文字列の配列(UPDATE,INSERTの順番) 088 * 089 */ 090 String[] getMergeStatement(); 091 092 /** 093 * 引数配列付のクエリーを実行します。 094 * 処理自体は、#execute() と同様に、各サブクラスの実装に依存します。 095 * これは、PreparedQuery で使用する引数を配列でセットするものです。 096 * select * from emp where deptno = ? and job = ? などの PreparedQuery や 097 * { call xxxx( ?,?,? ) } などの CallableStatement の ? 部分の引数を 098 * 順番にセットしていきます。 099 * 100 * @og.rev 6.1.1.0 (2015/01/17) 引数配列を可変引数にして、execute() を含めて定義します。 101 * 102 * @param args オブジェクトの引数配列 103 */ 104 void execute( String... args ) ; // 6.1.1.0 (2015/01/17) refactoring 105 106 /** 107 * 引数配列付のクエリーを実行します。 108 * 処理自体は、#execute() と同様に、各サブクラスの実装に依存します。 109 * これは、PreparedQuery で使用する引数を配列でセットするものです。 110 * select * from emp where deptno = ? and job = ? などの PreparedQuery の 111 * ? 部分の引数を 112 * 順番にセットしていきます。 113 * 114 * @og.rev 4.0.0.0 (2005/01/31) 新規追加 115 * 116 * @param keys オブジェクトのキー配列 117 * @param args オブジェクトの引数配列 118 */ 119 void execute( final String[] keys, final String... args ) ; // 6.1.1.0 (2015/01/17) refactoring 120 121 /** 122 * 引数配列付のクエリーを実行します。 123 * 処理自体は、#execute() と同様に、各サブクラスの実装に依存します。 124 * これは、PreparedQuery で使用する引数を配列でセットするものです。 125 * select * from emp where deptno = ? and job = ? などの PreparedQuery の 126 * ? 部分の引数を 127 * 順番にセットしていきます。 128 * 129 * @og.rev 4.0.0.0 (2005/01/31) 引数をすべて受け取って実行するメソッドを標準メソッドとして追加 130 * 131 * @param names カラム名(CSV形式) 132 * @param dbArrayType アレイタイプ名称 133 * @param sysArg DBSysArg配列 134 * @param userArg DBUserArg配列 135 */ 136 void execute( final String names,final String dbArrayType, 137 final DBSysArg[] sysArg,final DBUserArg[] userArg ) ; 138 139 /** 140 * 引数配列付のクエリーを実行します。 141 * 処理自体は、#execute() と同様に、各サブクラスの実装に依存します。 142 * これは、PreparedQuery で使用する引数を配列でセットするものです。 143 * select * from emp where deptno = ? and job = ? などの PreparedQuery の 144 * [カラム名] 部分の引数を、DBTableModelから順番にセットしていきます。 145 * 146 * @param rowNo 選択された行番号配列(登録する対象行) 147 * @param table DBTableModelオブジェクト(登録する元データ) 148 */ 149 void execute( final int[] rowNo, final DBTableModel table ) ; 150 151 /** 152 * クエリーの実行結果を返します。 153 * クエリーが失敗した場合や、CallableStatement の呼び出し等で実行件数が明確でない 154 * 場合は、-1 が返されます。 155 * 156 * @return クエリーの実行件数 157 */ 158 int getExecuteCount() ; 159 160 /** 161 * 実行結果の DBTableModel を返します。 162 * 163 * @return DBTableModelオブジェクト 164 */ 165 DBTableModel getDBTableModel() ; 166 167 /** 168 * データベースの最大検索件数を返します。 169 * データベース自体の検索は、指定されたSQLの全件を検索しますが、 170 * DBTableModelのデータとして登録する最大件数をこの値に設定します。 171 * サーバーのメモリ資源と応答時間の確保の為です。 172 * 173 * @return 最大検索件数 174 */ 175 int getMaxRowCount() ; 176 177 /** 178 * データベースの最大検索件数をセットします。 179 * データベース自体の検索は、指定されたSQLの全件を検索しますが、 180 * DBTableModelのデータとして登録する最大件数をこの値に設定します。 181 * サーバーのメモリ資源と応答時間の確保の為です。 182 * 183 * @param maxRowCount 最大検索件数 184 */ 185 void setMaxRowCount( int maxRowCount ) ; 186 187 /** 188 * データベースの検索スキップ件数を返します。 189 * データベース自体の検索は、指定されたSQLの全件を検索しますが、 190 * DBTableModelのデータとしては、スキップ件数分は登録されません。 191 * サーバーのメモリ資源と応答時間の確保の為です。 192 * 193 * @return 最大検索件数 194 */ 195 int getSkipRowCount(); 196 197 /** 198 * データベースの検索スキップ件数をセットします。 199 * データベース自体の検索は、指定されたSQLの全件を検索しますが、 200 * DBTableModelのデータとしては、スキップ件数分は登録されません。 201 * サーバーのメモリ資源と応答時間の確保の為です。 202 * 203 * @param skipRowCount スキップ件数 204 */ 205 void setSkipRowCount( int skipRowCount ); 206 207 /** 208 * アップデートフラグを取得します。 209 * これは、Query で更新処理の SQL 文を実行したときに true にセットされます。 210 * 更新処理が実行:true / 検索処理のみ:false を取得できます。 211 * 212 * @og.rev 2.1.2.3 (2002/12/02) データベース更新時に、更新フラグをセットするように変更 213 * @og.rev 4.0.0.0 (2007/07/20) メソッド名変更( getUpdateFlag() ⇒ isUpdate() ) 214 * 215 * @return アップデートされたかどうか( 更新処理:true / 検索処理:false ) 216 */ 217 boolean isUpdate() ; 218 219 /** 220 * リソースマネージャーをセットします。 221 * これは、言語(ロケール)に応じた DBColumn をあらかじめ設定しておく為に 222 * 必要です。 223 * リソースマネージャーが設定されていない、または、所定のキーの DBColumn が 224 * リソースに存在しない場合は、内部で DBColumn オブジェクトを作成します。 225 * 226 * @og.rev 4.0.0.0 (2005/01/31) lang ⇒ ResourceManager へ変更 227 * 228 * @param resource リソースマネージャー 229 */ 230 void setResourceManager( ResourceManager resource ) ; 231 232 /** 233 * エラーコード を取得します。 234 * エラーコード は、ErrorMessage クラスで規定されているコードです。 235 * 236 * @return エラーコード 237 */ 238 int getErrorCode() ; 239 240 /** 241 * エラーメッセージオブジェクト を取得します。 242 * 243 * @return エラーメッセージオブジェクト 244 */ 245 ErrorMessage getErrorMessage() ; 246 247 /** 248 * 編集設定オブジェクトをセットします。 249 * 250 * @og.rev 5.3.6.0 (2011/06/01) 新規追加 251 * 252 * @param config 編集設定オブジェクト 253 */ 254 void setEditConfig( final DBEditConfig config ); 255}