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 org.opengion.hayabusa.resource.ResourceManager;
019import org.opengion.fukurou.util.ErrorMessage;
020import org.opengion.fukurou.db.Transaction;
021
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        /**
040         * Queryオブジェクトを初期化します。
041         * これは、QueryFactory のプールから取り出すときに(または戻すとき)に
042         * 初期化するのに使用します。
043         *
044         */
045        void init() ;
046
047        /**
048         * ステートメント文字列をセットします。
049         *
050         * @param   statement ステートメント文字列
051         *
052         */
053        void setStatement( String statement ) ;
054
055        /**
056         * ステートメント文字列を取り出します。
057         *
058         * @return  ステートメント文字列
059         *
060         */
061        String getStatement();
062
063        /**
064         * クエリーを実行します。
065         * セットされているステートメント文字列とそのタイプが合っていない場合は,
066         * エラーになります。
067         * 実行結果は、DBTableModel にセットされます。
068         *
069         */
070        void execute() ;
071
072        /**
073         * 引数配列付のクエリーを実行します。
074         * 処理自体は, #execute() と同様に、各サブクラスの実装に依存します。
075         * これは、PreparedQuery で使用する引数を配列でセットするものです。
076         * select * from emp where deptno = ? and job = ? などの PreparedQuery や
077         * { call xxxx( ?,?,? ) } などの CallableStatement の ? 部分の引数を
078         * 順番にセットしていきます。
079         *
080         * @param   args オブジェクトの引数配列
081         */
082        void execute( String[] args ) ;
083
084        /**
085         * 引数配列付のクエリーを実行します。
086         * 処理自体は, #execute() と同様に、各サブクラスの実装に依存します。
087         * これは、PreparedQuery で使用する引数を配列でセットするものです。
088         * select * from emp where deptno = ? and job = ? などの PreparedQuery の
089         * ? 部分の引数を
090         * 順番にセットしていきます。
091         *
092         * @og.rev 4.0.0.0 (2005/01/31) 新規追加
093         *
094         * @param   keys オブジェクトのキー配列
095         * @param   args オブジェクトの引数配列
096         */
097        void execute( final String[] keys, final String[] args ) ;
098
099        /**
100         * 引数配列付のクエリーを実行します。
101         * 処理自体は, #execute() と同様に、各サブクラスの実装に依存します。
102         * これは、PreparedQuery で使用する引数を配列でセットするものです。
103         * select * from emp where deptno = ? and job = ? などの PreparedQuery の
104         * ? 部分の引数を
105         * 順番にセットしていきます。
106         *
107         * @og.rev 4.0.0.0 (2005/01/31) 引数をすべて受け取って実行するメソッドを標準メソッドとして追加
108         *
109         * @param       names           カラム名(CSV形式)
110         * @param       dbArrayType     アレイタイプ名称
111         * @param       sysArg          DBSysArg配列
112         * @param       userArg         DBUserArg配列
113         */
114        void execute( final String names,final String dbArrayType,
115                                        final DBSysArg[] sysArg,final DBUserArg[] userArg ) ;
116
117        /**
118         * 引数配列付のクエリーを実行します。
119         * 処理自体は, #execute() と同様に、各サブクラスの実装に依存します。
120         * これは、PreparedQuery で使用する引数を配列でセットするものです。
121         * select * from emp where deptno = ? and job = ? などの PreparedQuery の
122         * [カラム名] 部分の引数を、DBTableModelから順番にセットしていきます。
123         *
124         * @param   rowNo 選択された行番号配列(登録する対象行)
125         * @param   table DBTableModelオブジェクト(登録する元データ)
126         */
127        void execute( final int[] rowNo, final DBTableModel table ) ;
128
129        /**
130         * コミットを行います。
131         *
132         */
133        void commit() ;
134
135        /**
136         * ロールバックを行います。
137         *
138         */
139        void rollback() ;
140
141        /**
142         * 使用した Statementオブジェクトをクロースし、Connection オブジェクトを
143         * プールに返します。
144         *
145         */
146        void close() ;
147
148        /**
149         * Connection オブジェクトを実際にクローズ(破棄)します。
150         * プールからも削除します。
151         * 実行時エラー等が発生したときに、このメソッドを呼び出します。
152         *
153         */
154        void realClose() ;
155
156        /**
157         * クエリーの実行結果を返します。
158         * クエリーが失敗した場合や,CallableStatement の呼び出し等で実行件数が明確でない
159         * 場合は, -1 が返されます。
160         *
161         * @return      クエリーの実行件数
162         */
163        int getExecuteCount() ;
164
165        /**
166         * 実行結果の DBTableModel を返します。
167         *
168         * @return  DBTableModelオブジェクト
169         */
170        DBTableModel getDBTableModel() ;
171
172        /**
173         * データベースの最大検索件数を返します。
174         * データベース自体の検索は,指定されたSQLの全件を検索しますが,
175         * DBTableModelのデータとして登録する最大件数をこの値に設定します。
176         * サーバーのメモリ資源と応答時間の確保の為です。
177         *
178         * @return  最大検索件数
179         */
180        int getMaxRowCount() ;
181
182        /**
183         * データベースの最大検索件数をセットします。
184         * データベース自体の検索は,指定されたSQLの全件を検索しますが,
185         * DBTableModelのデータとして登録する最大件数をこの値に設定します。
186         * サーバーのメモリ資源と応答時間の確保の為です。
187         *
188         * @param   maxRowCount 最大検索件数
189         */
190        void setMaxRowCount( int maxRowCount ) ;
191
192        /**
193         * データベースの検索スキップ件数を返します。
194         * データベース自体の検索は,指定されたSQLの全件を検索しますが,
195         * DBTableModelのデータとしては、スキップ件数分は登録されません。
196         * サーバーのメモリ資源と応答時間の確保の為です。
197         *
198         * @return  最大検索件数
199         */
200        int getSkipRowCount();
201
202        /**
203         * データベースの検索スキップ件数をセットします。
204         * データベース自体の検索は,指定されたSQLの全件を検索しますが,
205         * DBTableModelのデータとしては、スキップ件数分は登録されません。
206         * サーバーのメモリ資源と応答時間の確保の為です。
207         *
208         * @param   skipRowCount スキップ件数
209         */
210        void setSkipRowCount( int skipRowCount );
211
212        /**
213         * アップデートフラグを取得します。
214         * これは、Query で更新処理の SQL 文を実行したときに true にセットされます。
215         * 更新処理が実行:true / 検索処理のみ:false を取得できます。
216         *
217         * @og.rev 2.1.2.3 (2002/12/02) データベース更新時に、更新フラグをセットするように変更
218         * @og.rev 4.0.0.0 (2007/07/20) メソッド名変更( getUpdateFlag() ⇒ isUpdate() )
219         *
220         * @return       アップデートされたかどうか( 更新処理:true / 検索処理:false )
221         */
222        boolean isUpdate() ;
223
224        /**
225         * リソースマネージャーをセットします。
226         * これは、言語(ロケール)に応じた DBColumn をあらかじめ設定しておく為に
227         * 必要です。
228         * リソースマネージャーが設定されていない、または、所定のキーの DBColumn が
229         * リソースに存在しない場合は、内部で DBColumn オブジェクトを作成します。
230         *
231         * @og.rev 4.0.0.0 (2005/01/31) lang ⇒ ResourceManager へ変更
232         *
233         * @param  resource リソースマネージャー
234         */
235        void setResourceManager( ResourceManager resource ) ;
236
237        /**
238         * エラーコード を取得します。
239         * エラーコード は、ErrorMessage クラスで規定されているコードです。
240         *
241         * @return   エラーコード
242         */
243        int getErrorCode() ;
244
245        /**
246         * エラーメッセージオブジェクト を取得します。
247         *
248         * @return   エラーメッセージオブジェクト
249         */
250        ErrorMessage getErrorMessage() ;
251
252        /**
253         * Transactionオブジェクトを外部から設定します。
254         *
255         * 通常は、ConnectionFactory を使用して、内部で Connection を作成しますが、
256         * 一連のトランザクション処理を実施するには、外部から Transactionオブジェクトを
257         * を与えて、そこから、Connection を取り出す必要があります。
258         *
259         * ここでは、内部の connection が存在しない場合に限り、セットを許可します。
260         *
261         * @og.rev 5.1.9.0 (2010/08/01) 新規追加
262         *
263         * @param       connID  接続先ID
264         * @param       tran    Transactionオブジェクト
265         */
266        void setTransaction( final String connID , final Transaction tran ) ;
267
268        /**
269         * エディット設定オブジェクトをセットします。
270         *
271         * @og.rev 5.3.6.0 (2011/06/01) 新規追加
272         *
273         * @param config エディット設定オブジェクト
274         */
275        void setEditConfig( final DBEditConfig config );
276}