    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}